web-dev-qa-db-ja.com

Owinはweb.configでスタートアップクラスを提供します(自動スタートアップ検出なし)

私はweb.configで次のことを試みます:

_<appSettings>
   <add key="owin:AutomaticAppStartup" value="false" />
   <add key="owin:appStartup" value="MyNamespace.MyStartupClass" />
</appSettings>
_

これを理解したら documentation 正しく自動起動検出を無効にする必要があります。したがって、スタートアップ属性は必要ありません。

残念ながら、OWINは起動しないようです。 (エラー:_HTTP Error 403.14 - Forbidden_が表示されるため、これが表示されます。コントローラーを使用して、インデックスファイルへの要求を処理します。)

_<add key="owin:AutomaticAppStartup" value="true" />_を使用して起動属性[Assembly: OwinStartup(typeof(MyStartupClass))]を追加すると、アプリケーションは期待どおりに起動します。

質問はなぜですか?問題を解決するにはどうすればよいですか?

OWIN 3.0.0.0を使用しています

更新:

これが私のスタートアップクラスの外観です(関連部分を含む縮小バージョン):

_using System.Web.Http;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;
using MyOtherNamespace;

namespace MyNamespace
{
    public class MyOnlineStartup : MyOtherStartup
    {
        public new void Configuration(IAppBuilder app)
        {
            base.Configuration(app); //Call base method! This is important because otherwise ther serilization will not be correct
            HttpConfiguration config = CreateRouting();
            config.Routes.MapHttpRoute("exampleAppNone", "", new { controller = "MyIndex" }, null, null);
            config.Routes.MapHttpRoute("exampleAppIndex", "index.html", new { controller = "MyIndex" }, null, null);
            app.UseWebApi(config); // Use the WebAPI technology.
        }
    }
}
_

から派生

_using System.Linq;
using System.Web.Http;
using Microsoft.AspNet.SignalR;
using Newtonsoft.Json;
using Owin;

namespace MyOtherNamespace
{
    public class MyOtherStartup
    {
        protected static HttpConfiguration CreateMyRouting()
        {
            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                "myIndex",
                "my/",
                new
                {
                    controller = "MyIndex"
                },
                null,
                null
                );
            config.Routes.MapHttpRoute(
                "myIndex2",
                "my/index.html",
                new
                {
                    controller = "MyIndex"
                },
                null,
                null
                );
            var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
            config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
            config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto
            return config;
        }

        public void Configuration(IAppBuilder app)
        {
            JsonSerializer serializer = Serialization.ClientJsonSerializer();
            serializer.ContractResolver = new MySerializationContractResolver(false);
            GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer);
            app.MapSignalR("/" + MyRequestHandler.MySignalRPath, new HubConfiguration());          
        }
    }
}
_
14
Sjoerd222888

Web.configファイルから次のコード行を削除するだけです。

<add key="owin:AutomaticAppStartup" value="false" />

web.configファイルは次のようになります。

<appSettings>
    <add key="owin:appStartup" value="MyNamespace.MyStartupClass" />
</appSettings>  

owin:appStartupキーを追加するだけで、スタートアップ属性は不要です。

29