我注意到在使用C#构建一个较旧的MVC项目时,有很多对OWIN库的引用。但是在VS2015 SP3中创建.NET Core Web应用程序时,似乎没有任何参考。
此库已废弃吗?
答案 0 :(得分:12)
OWIN不是图书馆,而是specification。来自文档,
OWIN定义了.NET Web服务器和Web应用程序之间的标准接口。
&#34>重要思想"如果每个人都可以就使用的通用接口达成一致,那么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是对低级请求(&#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。