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

Posted

技术标签:

【中文标题】Katana 与 IIS 上的 ASP.NET 5 应用程序有何关系?【英文标题】:How does Katana relate to ASP.NET 5 applications on IIS? 【发布时间】:2015-01-30 13:28:30 【问题描述】:

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

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

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

“[SystemWeb] 提供运行在 ASP.NET 请求管道中的 OWIN 服务器”

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 质询,然后还通过正常的响应消息传递系统返回 401。

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

【问题讨论】:

你在这里说的是 MVC 5 吗? ASP.NET 5,实际上包含了 MVC 6,它和 WebApi 一样是全功能的 OWIN。 MVC 5 仅包含一些 OWIN 功能,即便如此,它确实是 Identity 的一部分,而不是真正的 MVC 5。 Err... 后者,MVC 5,我相信。对不起,现在你指出来了,因为版本号重合我一定忘记了它们实际上是独立的。 【参考方案1】:

当您使用 Owin.Host.SystemWeb 时,您将在通常的 HttpModules 管道中注入一个用于托管 OWIN 管道的 HttpModule。

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

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

我推荐 Prabu 的文章:

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

它很好地概述了整个过程。

【讨论】:

以上是关于Katana 与 IIS 上的 ASP.NET 5 应用程序有何关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 5.2.3 和 Katana 中正确设置双重身份验证?

将 Owin / Katana 与 ASP.NET Core(实际用例)一起使用是不是仍然相关?

IIS 7.5 上的调试与发布模式

IIS 7.5 上的 ASP.NET MVC

IIS 7.5 上的 ASP.NET MVC

asp.net web api 自托管 / owin / katana