Owin在web.config中提供启动类(没有自动发现启动)。

问题描述 投票:16回答:2

我试着在我的web.config中做如下操作。

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

如果我理解的话 文件 正确的自动启动检测应该是被禁用的。所以我不需要启动属性。

不幸的是,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());          
        }
    }
}
c# asp.net owin
2个回答
31
投票

只需删除web.config文件中的这行代码。

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

你的 web.config 文件现在必须像这样。

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

通过添加 owin:appStartup 键,你不需要启动属性。


0
投票

有时如果你重命名你的项目名称,那么你也会得到这个错误。请确保重命名你的程序集信息&amp;也请检查你的项目属性。右击你的项目 => 转到属性 => 验证你的程序集名称和项目名称。

对我来说,这就解决了我的OWIN库问题。

项目属性 汇编名称更改

© www.soinside.com 2019 - 2024. All rights reserved.