Katana 与 IIS 上的 ASP.NET 5 个应用程序有什么关系?

How does Katana relate to ASP.NET 5 applications on IIS?

我了解 OWIN 是什么,它很好,一般来说,Katana 是 Microsoft 实现的 ASP.NET 生态系统标准。

我还读到,Katana 目前仅设计用于与 WebApi 和 SignalR 一起使用,因为它们不依赖 System.Web。酷

但是,新的 ASP.NET MVC 5 项目模板确实包含一些 Katana 内容和引用 Microsoft.Owin.Host.SystemWeb,这就是我感到困惑的地方。

"[SystemWeb] provides an OWIN server that runs in the ASP.NET request pipeline"

http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

那么,在 IIS 上,请求在被路由到 WebApi 操作之前是否会通过 Owin 管道?还有 MVC 操作吗? Owin 在管道中处于什么位置?

ChallengeResult.cs 模板中查看以下代码:

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        Request.GetOwinContext().Authentication.Challenge(LoginProvider);

        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
        response.RequestMessage = Request;
        return Task.FromResult(response);
    }

这似乎是在与两条管道对话;它告诉 Owin 管道上的身份验证中间件发送 401 质询,然后 returns 通过正常响应消息系统发送 401。

我确定它很简单,但我很困惑。

当您使用 Owin.Host.SystemWeb 时,您是在通常的 HttpModules 管道中注入一个 HttpModule 来承载 OWIN 管道。

从 IIS/ASP.NET 的角度来看,OWIN 管道将在该上下文中执行。

如果您想更好地控制什么时候运行,您可以添加映射到传统事件序列的特定阶段标记。

我推荐 Prabu 的文章:

http://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline

它很好地概述了该过程。