我正在阅读http://owin.org/spec/owin-1.0.0.html上的 OWIN 1.0 规范,只是无法理解它是如何工作的。我已经下载了 Katana 源代码,但它太大了,并没有任何帮助。我熟悉只有接口的项目/程序集的标准方式,它允许在没有直接摄政的情况下集成两个项目。但我无法理解 Web 服务器将如何仅使用 Func<> 和 Action<> 定义调用 Web 应用程序。
2 回答
OWIN 归结为两件事:
1)“环境”字典
2) 处理请求并发送响应的方法。
对于#1,这只是一个属性包,可让您访问请求标头、请求流、响应标头、响应流和服务器数据。将此视为 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
OWIN 只是定义了 Web 服务器和 Web 应用程序如何相互通信。您的应用程序必须实现此联系的一侧,连接到 Web 服务器的另一侧必须通过安装特定于 Web 服务器的 NuGet 包来提供。有一个用于 IIS,一个用于自托管(独立应用程序)等。