【问题标题】:Run Asp.Net Mvc as OWIN middleware?将 Asp.Net Mvc 作为 OWIN 中间件运行?
【发布时间】:2014-04-09 21:52:50
【问题描述】:

是否可以将 Asp.Net Mvc 作为 OWIN 中间件运行?这需要什么?我似乎找不到任何关于此的信息,但我不知道为什么它不可能。

有可能吗?这简单吗?这个问题有意义吗?

【问题讨论】:

  • 你为什么要这样做?用例是什么?
  • @GeorgeStocker 目前只是知识,但最终能够通过 nuget 作为 OWIN 中间件分发垂直应用程序切片。例如,包含用于管理用户帐户的 ui 的用户管理组件可以构建在 asp.net mvc 中,并同样包含在 Mvc、Webforms、Nancy 和 OpenRasta 项目中。
  • 另一个用例是创建一个能够执行任何浏览器内单元测试(例如 jasmine)的独立控制台应用程序
  • @GeorgeStocker 下面是用例:具有适用于 MVC、WebAPI、SignalR 的基于中间件的身份验证。事实证明,当前 MVC 会将 Thread.CurrentPrincipal 重置为 HttpApplication.AuthenticateRequest 生成的值,除非您添加 AuthenticationFilter。也许我做错了什么,但似乎 MVC 有效地忽略了 OWIN 中间件的一些影响。而且它不是很好,有点打破了中间件的整个想法。
  • @PavelGatilov 这可能只是 asp.net 尚未与中间件概念完全集成的结果。在下一个版本的 asp.net 发布之前,它处于“被入侵”状态

标签: asp.net-mvc owin


【解决方案1】:

目前 ASP.NET MVC 不能在 OWIN 上运行。 Web API 将因为它与System.Web 分离,特别是HttpContext。这也是阻止 MVC 在 OWIN 上运行的主要依赖项。

在 OWIN 上运行的一些替代方案是 FubuMVC、Nancy 和 Simple.Web

【讨论】:

  • 为什么你可以在mvc项目中使用owin特性(blogs.msdn.com/b/webdev/archive/2013/07/03/…)却不能在owin上运行mvc?从 mvc 中使用 owin 但根本不在 owin 上运行 mvc 是如何工作的?有没有我可以阅读的文章或其他内容来澄清这一点?
  • @zespri 这就是 owin.host.systemweb 包的全部意义所在。有文章,但想法是这样的 - 应该是 mvc、web api 等都实现为 OWIN 中间件。目前(很快)这不太可能。因此,这个包以与 Mvc 相同的方式实现 OWIN - 作为 HttpModule(相同概念的更糟糕的 IIS 版本)。这最终提供了标准 OWIN 的大部分但不是全部的好处。
【解决方案2】:

不,MVC 依赖于 System.Web.dll(因此也依赖于 IIS)。

【讨论】:

  • 我不明白。为什么对 IIS 的依赖意味着我不能将其作为 OWIN 中间件运行?你不能构建适应 IHttpHandler 的 OWIN 中间件还是我错过了什么?
  • 理论上这是可能的,但今天不是这样。您可以将两者结合起来——OWIN 中间件可以在 IIS 管道中运行,但 MVC 本身并不是一个纯 OWIN 中间件组件(因此不能在非 IIS OWIN 主机中运行,例如)。
  • 这在 2020 年仍然有效吗?
【解决方案3】:

结帐project Helios。可能满足需求。

【讨论】:

    【解决方案4】:

    您可以查看 Katana.Boot.AspNet,但作为Chris Ross said,它只是一个“hello world”原型,没有任何进一步的开发。你也可以看看 OWIN Gate 时代的 ASP.NET 管道adapter。

    【讨论】:

    • 哦!还有here我们可以改变世界:^)
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 2017-05-12
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多