gpt4 book ai didi

c# - 使 IIS 开始通过 Owin 管道响应请求的过程是什么?

转载 作者:太空狗 更新时间:2023-10-29 20:02:49 25 4
gpt4 key购买 nike

如果您在 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"));
}
}

然后运行,您会看到 hello 出现在浏览器中。但是,如果您查看项目,任何文件(即 web.config)都没有变化,这表明正在使用 Owin 管道。更重要的是,如果您拥有 Startup 类但未安装 Microsoft.Owin.Host.SystemWeb 程序包,则 Startup 的配置方法将永远不会运行。

我怀疑有一个自定义模块和处理程序参与了所有这一切的发生,但找不到任何关于它的文档。我能找到的唯一稍微触及这个主题的是 this .

如何仅通过引用一些 dll 就可以改变请求的处理方式?

最佳答案

从 ASP.NET 4 开始,您现在可以使用特定约定在代码(引用的 DLL 或源代码)中定义自定义类,并在管道的早期由 ASP.NET 系统调用它。

只需用PreApplicationStartMethodAttribute标记即可

Microsoft.Owin.Host.SystemWeb 程序集利用了这个特性,如果我们反射(reflection)代码,我们可以看到这个启动方法注册了 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 接管并进入 OwinBuilderOwinAppContext 流,它查找 Startup 程序集中的类来调用 Configuration 方法。

关于c# - 使 IIS 开始通过 Owin 管道响应请求的过程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com