OWIN如何挂钩ASP.NET启动

Wan*_*hir 5 asp.net iis asp.net-mvc 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吗?

Xav*_*gea 5

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

[assembly: OwinStartup(typeof(MyApp.Security.Authentication.Startup))]
Run Code Online (Sandbox Code Playgroud)

上面的行通知 .NET 将在开始时调用的类和方法。

或者,您可以在 WebConfig 中配置启动

<appSettings>
...
<add key="owin:appStartup" value="MyApp.Security.Authentication.Startup" />
...
</appSettings>
Run Code Online (Sandbox Code Playgroud)

从那时起,您可以放置​​ 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

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

检查此链接中的“Owin 启动类检测”部分以及有关 PreApplicationStartMethodAttribute 的此链接

  • 据我了解,NuGet 包“Microsoft.Owin.Host.SystemWeb”负责此启动过程。IIS 托管应用程序中的启动检测需要此包:http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection。 (2认同)