我正在阅读 OWIN 1.0 规范 http://owin.org/spec/owin-1.0.0.html只是无法理解它是如何工作的。我已经下载了 Katana 源代码,但它太大了,并没有任何帮助。我熟悉只有接口(interface)的项目/程序集的标准方式,它允许在没有直接摄政的情况下集成两个项目。但我无法理解 Web 服务器将如何仅使用 Func<> 和 Action<> 定义调用 Web 应用程序。
最佳答案
OWIN 归结为两件事:
1)“环境”字典
2) 处理请求并发送响应的方法。
对于#1,这只是一个属性包,可让您访问请求 header 、请求流、响应 header 、响应流和服务器数据。将此视为 ASP.NET 的 HttpContext 或 System.Net.HttpListener 的 HttpListenerContext。事实上,在 Katana 的最新版本(https://katanaproject.codeplex.com/,它是 ASP.NET 团队的一个开源实现)中,已经进行了改进(更多的改进)以将其简化为更易于使用的对象模型,包括OwinRequest、OwinResponse 和 IOwinContext。
对于#2,这通常称为“AppFunc”,签名是:
using AppFunc = Func<IDictionary<string, object>, Task>;
此签名用于请求处理程序管道中的“中间件”,也可以是生成 HTML 的最终应用程序、WebAPI 等。
在 Katana 中,您可以继承一个类来简化此签名以使用我之前提到的 IOwinContext。看看OwinMiddlware
您还可以阅读这篇文章,它概述了 Katana/OWIN 的工作:http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana
关于functional-programming - OWIN 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242349/