据我了解,除了自己的原生中间件外,ASP.NET Core还支持OWIN中间件(通过app.UseOwin()
)。
ASP.NET Core中间件和OWIN中间件有什么区别?
在设计新的中间件时,我如何知道是否应将其设计为ASP.NET Core中间件或OWIN中间件?
答案 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);