我一直在浏览和搜索有关ASP.NET事件上的OWIN钩子(Hook)之类的信息。

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

但是,我看到启动ASP.NET时会自动调用OWIN,而无需调用webapp start或其他任何方法。 OWIN只需挂接到ASP.NET并充当每个请求的拦截器。

我的示例是signalr,我们在OWIN配置方法中称为signalr的映射。但是,我看不到任何可能调用OWIN配置方法的东西。但是信号器已经被映射并且可以工作了。

OWIN如何钩住ASP.NET事件?是注册钩子(Hook)的OWIN还是现在识别OWIN并自动调用的ASP.NET?

最佳答案

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

[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之前。

请检查此link和此link中有关PreApplicationStartMethodAttribute的“Owin Startup类检测”部分。

关于asp.net - OWIN如何与ASP.NET启动 Hook ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25592326/

10-13 01:23