如果您在Visual Studio 2013中创建一个空的ASP.NET Web应用程序项目,请打开程序包管理器控制台并安装程序包Microsoft.Owin.Host.SystemWeb
使用Configuration(IAppBuilder app)方法添加一个Startup类,例如:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Run(context => context.Response.WriteAsync("hello"));
}
}
运行后,您会在浏览器中看到问候。但是,如果您查看项目,则对任何文件(即web.config)都没有任何更改,这表明正在使用Owin管道。更重要的是,如果您具有Startup类,但未安装Microsoft.Owin.Host.SystemWeb包,则将永远不会运行Startup的Configuration方法。
我怀疑是否有一个自定义模块和处理程序参与了所有这些工作,但是找不到有关它的任何文档。我能找到的唯一触及这个主题的东西就是这个。
您如何仅通过引用一些dll即可更改处理请求的方式?
从ASP.NET 4开始,您现在可以使用特殊约定在代码(引用的DLL或源代码)中定义自定义类,并在管道的早期阶段通过ASP.NET系统对其进行调用。
只需使用PreApplicationStartMethodAttribute进行标记
Microsoft.Owin.Host.SystemWeb程序集利用此功能,如果我们在代码上进行反思,我们可以看到此启动方法注册了Owin模块:
public static class PreApplicationStart
{
private const string TraceName = "Microsoft.Owin.Host.SystemWeb.PreApplicationStart";
/// <summary>
/// Registers the OWIN request processing module.
/// </summary>
public static void Initialize()
{
try
{
if (OwinBuilder.IsAutomaticAppStartupEnabled)
{
HttpApplication.RegisterModule(typeof(OwinHttpModule));
}
}
catch (Exception exception1)
{
Exception exception = exception1;
ITrace trace = TraceFactory.Create("Microsoft.Owin.Host.SystemWeb.PreApplicationStart");
trace.WriteError(Resources.Trace_RegisterModuleException, exception);
throw;
}
}
}
从那时起,OwinHttpModule接管并进入OwinBuilder和OwinAppContext流,后者Startup
在您的程序集中查找该类以调用该Configuration
方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句