在使用C#构建较旧的MVC项目时,我注意到,有很多对OWIN库的引用。但是,在VS2015 SP3中创建.NET Core Web应用程序时,似乎没有对其的引用。
这个图书馆被淘汰了吗?
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
});
有关将OWIN中间件添加到ASP.NET Core管道的更多示例,请参见文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句