ASP.NET Core中间件还是OWIN中间件?

Fre*_*red 20 owin-middleware asp.net-core

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

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

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

Ral*_*ing 17

你的问题让我很好奇,我想分享一下,到目前为止我学到了什么.

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核心中间件将被认为更"合适".

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


Fre*_*red 5

我是这样理解的;ASP.NET Core 中间件的级别高于 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);
Run Code Online (Sandbox Code Playgroud)