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

时间:2016-09-10 18:11:37

标签: asp.net-core owin-middleware

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

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

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

2 个答案:

答案 0 :(得分:14)

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

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

虽然这种转变与OWIN规范类似。虽然已经做了一些改变。为了在ASP.NET Core中使用现有的OWIN中间件,可以通过可选功能支持OWIN(" app.UseOwin()")。

如果您希望使用中间件ASP.NET应用程序和ASP.NET核心应用程序,那么我将使用OWIN中间件。如果您希望为ASP.NET Core开发人员提供一流的公民体验,那么ASP.NET Core中间件将被认为是更多" fit"。

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

答案 1 :(得分:2)

我已经明白了这一点; ASP.NET核心中间件的级别高于较低级别的OWIN中间件。

ASP.NET核心中间件的优势在于,在您可以使用的HttpContext中传递中间件时更容易。缺点是您开发的中间件依赖于ASP.NET Core。

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

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

var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);