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

34

据我了解,ASP.NET Core除了具有自身本地中间件外,还支持OWIN中间件(通过app.UseOwin())。

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

在设计新的中间件时,如何确定是将其设计为ASP.NET Core中间件还是OWIN中间件?

2个回答

33

你的问题让我很好奇,我想分享一下自己目前所学到的内容。

Katana 是 OWIN 规范的一个实现。在 Katana 的 3.0 版本之后,这个技术已经完全整合到我们今天所知道的 ASP.NET Core web stack 中。

虽然在这个转变过程中,许多东西都与 OWIN 规范保持相似,但还是进行了一些更改。为了在 ASP.NET Core 中使用现有的 OWIN middleware,需要使用支持 OWIN 的可选功能 ("app.UseOwin()")。

如果你的中间件要针对 ASP.NET 应用程序和 ASP.NET Core 应用程序,则应使用 OWIN middleware。如果你想给 ASP.NET Core 开发人员提供一种一流公民体验,那么 ASP.NET Core middleware 会被认为更加“适合”。

关于 ASP.NET Core middleware 和 OWIN middleware 之间关系的一些信息可以在以下链接中找到:


7
我理解为: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);

1
Mark。OwinEnvironment是来自于Microsoft.AspNetCore.Owin的概念,而不是纯粹的OWIN事物。类似于此,OwinMiddleware是Katana的一种东西,而不是纯粹的OWIN事物。 - John Korsnes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接