OWIN如何挂钩ASP.NET启动

时间:2014-08-31 13:13:25

标签: asp.net asp.net-mvc iis owin

我一直在浏览和搜索OWIN之类的东西如何挂钩ASP.NET活动。

我知道如果我们创建一个自托管的OWIN,我们将手动调用它,很明显我们正在调用OWIN使其开始运行。

但是,我发现在ASP.NET启动时会自动调用OWIN而无需调用webapp start或其他任何东西。 OWIN只是挂钩进入ASP.NET并在每个请求上充当拦截器。

我的例子是signalr,我们在OWIN配置方法中调用signalr的映射。但是,我没有看到任何可能调用OWIN配置方法的东西。但是信号器已经映射并且有效。

OWIN是如何挂钩ASP.NET活动的?是OWIN注册了现在识别OWIN并自动调用的钩子或ASP.NET吗?

1 个答案:

答案 0 :(得分:4)

您的项目中会有类似的这样一行:

[assembly: OwinStartup(typeof(MyApp.Security.Authentication.Startup))]

上面的行告诉.NET将在开头调用的类和方法。

备选您可以在WebConfig中配置启动

<appSettings>
...
<add key="owin:appStartup" value="MyApp.Security.Authentication.Startup" />
...
</appSettings>

从那时起,您可以放置​​OWIN组件,以及通常放置在Global.asax Application_Start事件处理程序中的所有配置项。

删除Global.asax类: 如果您使用OWIN,则无需使用Gobal.asax类并启动Application_Start事件,因此您可以将其删除。

Startup.cs的代码示例

using System.Web.Http;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(MyApp.Security.Authentication.Startup))]
namespace MyApp.Security.Authentication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            HttpConfiguration config = new HttpConfiguration();
            WebApiConfig.Register(config);
            app.UseWebApi(config);
        }
    }
}

<强>编辑:

OWIN使用启动类,您可以在其中指定要包含在应用程序管道中的组件。如果查看Katana source code,Katana SystemWeb主机会使用PreApplicationStartMethodAttribute挂钩到应用程序启动。 在.NET 4中引入的PreApplicationStartMethodAttribute允许您在应用程序启动时尽早在ASP.NET管道中运行代码。我的意思是提前,甚至在Application_Start之前。

检查&#34; Owin Startup类检测&#34;有关PreApplicationStartMethodAttribute的link和此link部分。