我一直在浏览和搜索有关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/