ASP.NET Core仍然使用OWIN吗?

Tro*_*yvs 10 obsolete owin visual-studio-2015 .net-core asp.net-core

我注意到在使用C#构建一个较旧的MVC项目时,有很多对OWIN库的引用.但是在VS2015 SP3中创建.NET Core Web应用程序时,似乎没有对它的引用.

这个图书馆已经过时了吗?

Nat*_*ini 13

OWIN不是一个库,它是一个规范.从文档中,

OWIN定义了.NET Web服务器和Web应用程序之间的标准接口.

OWIN的"大创意"是,如果每个人都可以就可以使用的通用接口达成一致,则可以将应用程序与其运行的服务器分离.实际上,兼容OWIN的服务器可以运行任何与OWIN兼容的应用程序.这是对我们过去的紧密耦合的改进(应用程序只能在IIS上运行,就是这样).

许多OWIN规范致力于描述各种属性的名称.一个OWIN兼容服务器将传入请求转换一个Dictionary<string, object>包含了一堆像钥匙的owin.RequestBody和owin.ResponseBody.如果传递请求的应用程序或中间件知道如何读取这些键,则它可以处理请求.而已!

有是 OWIN库(比如OWIN和Microsoft.Owin),这是混乱的公共源极.这些库只是OWIN接口的类型安全实现,或者是帮助更容易与OWIN兼容的组件进行交互的帮助程序.

正如@Murray和@Tseng指出的那样,ASP.NET Core不是基于OWIN构建的,而是与OWIN兼容的.或者,ASP.NET Core运行的服务器(Kestrel,WebListener,IIS)与OWIN兼容.ASP.NET Core是对低级请求("OWIN级别")的进一步抽象,可以轻松构建控制器和服务器呈现页面等内容.

由于ASP.NET Core 与 OWIN兼容,因此可以轻松插入任何与OWIN兼容的中间件.该Microsoft.AspNetCore.Owin包暴露了一种UseOwin方法:

app.UseOwin(pipeline =>
{
    pipeline(next => OwinHello);
    // where  OwinHello is a compatible middleware function
});
Run Code Online (Sandbox Code Playgroud)

有关将OWIN中间件添加到ASP.NET Core管道的更多示例,请参阅文档.

  • 但是`HttpContext.Items`是一个`Dictionary <object,object>`而OWIN环境字典是`Dictionary <string,object>`."HttpContext.Items"也是空的,所以虽然它可能用于在中间件之间共享数据,但它不包含原始的OWIN环境. (2认同)