我一直在浏览和搜索OWIN之类的东西如何挂钩ASP.NET活动。
我知道如果我们创建一个自托管的OWIN,我们将手动调用它,很明显我们正在调用OWIN使其开始运行。
但是,我发现在ASP.NET启动时会自动调用OWIN而无需调用webapp start或其他任何东西。 OWIN只是挂钩进入ASP.NET并在每个请求上充当拦截器。
我的例子是signalr,我们在OWIN配置方法中调用signalr的映射。但是,我没有看到任何可能调用OWIN配置方法的东西。但是信号器已经映射并且有效。
OWIN是如何挂钩ASP.NET活动的?是OWIN注册了现在识别OWIN并自动调用的钩子或ASP.NET吗?
答案 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部分。