OWIN如何在ASP.NET启动时挂钩

5

我一直在浏览和谷歌搜索有关OWIN如何挂钩到ASP.NET活动的信息。

我知道如果我们创建一个自托管的OWIN,我们需要手动调用它,这清楚地表明我们正在调用OWIN以使其开始运行。

然而,我发现当ASP.NET启动时,OWIN会自动被调用,无需调用webapp start或其他任何内容。OWIN只需挂钩到ASP.NET并作为每个请求的拦截器。

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

OWIN是如何挂钩到ASP.NET活动的?是OWIN注册了这些挂钩,还是ASP.NET现在识别OWIN并自动调用它们?

1个回答

5
您的项目中会有类似这样的一行代码:
[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,则不需要使用Global.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源代码,则Katana SystemWeb主机使用PreApplicationStartMethodAttribute来钩入应用程序启动。 PreApplicationStartMethodAttribute是.NET 4中引入的,允许您在应用程序启动时早期运行代码。我的意思是非常早期,甚至早于Application_Start。

请查看此链接中的“Owin Startup class detection”部分以及此链接有关PreApplicationStartMethodAttribute的内容。


1
那么,ASP.NET已经升级,以便在开头搜索OWIN启动了吗?我是否可以创建类似OWIN的框架,它可以在不手动调用的情况下挂钩ASP.NET活动? - Wancak Terakhir
2
据我的理解,“Microsoft.Owin.Host.SystemWeb” NuGet包负责此启动过程。该软件包在IIS托管应用程序中需要进行启动检测:http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection。 - Xavier Egea
1
我的问题是,正如你所说,Microsoft.Owin.Host.SystemWeb是如何钩入IIS启动和ASP.NET活动的。 - Wancak Terakhir
就是这样,PreApplicationStartMethodAttribute 就是我一直在寻找的。非常感谢。 - Wancak Terakhir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接