30

app.UseOwin()据我了解,ASP.NET Core除了自己的本机中间件外,还支持 OWIN 中间件(通过)。

ASP.NET Core 中间件和 OWIN 中间件有什么区别?

在设计新的中间件时,我如何知道应该将其设计为 ASP.NET Core 中间件还是 OWIN 中间件?

4

2 回答 2

26

你的问题让我很好奇,我想分享一下我到目前为止所学到的东西。

Katana 是 OWIN 规范的实现。在 Katana 3.0 版之后,这项技术已完全集成到我们今天称为 ASP.NET Core 的 Web 堆栈中。

虽然这种转变与 OWIN 规范有很大的相似之处。虽然做了一些改动。为了在 ASP.NET Core 中使用现有的 OWIN 中间件,通过一个可选功能(“ app.UseOwin()”)支持 OWIN。

如果您想以中间件 ASP.NET 应用程序和 ASP.NET 核心应用程序为目标,那么我会使用 OWIN 中间件。如果您想为 ASP.NET Core 开发人员提供一流的公民体验,那么 ASP.NET Core 中间件将被认为更“合适”。

有关 ASP.NET Core 中间件和 OWIN 中间件之间关系的一些信息可以在这里找到:

于 2016-09-11T10:35:26.203 回答
5

我是这样理解的;ASP.NET Core 中间件的级别高于 OWIN 中间件,而 OWIN 中间件的级别较低。

ASP.NET Core 中间件的优势在于,当您传入HttpContext可以使用的中间件时,开发中间件要容易得多。缺点是你开发的中间件依赖于 ASP.NET Core。

OWIN 处于较低级别,您将获得一个 OWIN 环境,即IDictionary<string, object>. 优点是它不依赖于 ASP.NET,因此可以在任何 OWIN 服务器(例如 Nowin)上运行。缺点是编码需要花费更多精力,因为您必须从 OWIN 环境构建自己的上下文或直接使用 OWIN 环境字典并跟踪所有OWIN 键和对象。

编辑:您不必自己跟踪 OWIN 键,您可以使用OwinEnvironment该类来获得强类型环境。

var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);
于 2016-09-27T12:25:53.783 回答