ASP.NET Core仍然使用OWIN吗?

时间:2016-08-02 06:25:38

标签: visual-studio-2015 asp.net-core owin .net-core obsolete

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

此库已废弃吗?

1 个答案:

答案 0 :(得分:12)

OWIN不是图书馆,而是specification。来自文档,

  

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

&#34>重要思想"如果每个人都可以就使用的通用接口达成一致,那么OWIN就是可以将应用程序与它们运行的​​服务器分离。实际上,兼容OWIN的服务器可以运行任何与OWIN兼容的应用程序。这是对我们过去紧密耦合的改进(应用程序只能在IIS上运行,而且就是它)。

许多OWIN规范专门用于描述各种属性的名称。兼容OWIN的服务器会将传入的请求转换为包含Dictionary<string, object>owin.RequestBody等一系列密钥的owin.ResponseBody。如果传递请求的应用程序或中间件知道如何读取这些键,则它可以处理请求。那就是它!

OWIN库(如OWINMicrosoft.Owin),这是混淆的常见原因。这些库只是OWIN接口的类型安全实现,或者是帮助更容易与OWIN兼容的组件进行交互的助手。

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

由于ASP.NET Core 兼容OWIN,因此可以轻松插入任何兼容OWIN的中间件。 Microsoft.AspNetCore.Owin包公开了UseOwin方法:

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

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