functional-programming - OWIN 是如何工作的?

标签 functional-programming owin

我正在阅读 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 团队的一个开源实现)中,已经进行了改进(更多的改进)以将其简化为更易于使用的对象模型,包括OwinRequestOwinResponseIOwinContext

对于#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/

相关文章:

functional-programming - xappings, xectors, xets

scala - 避免按类型过滤实例

haskell - 功能证明(Haskell)

Windows Server 2016/2019 错误地返回 Owin.dll 上的 Authenticode 签名

c# - 在 Microsoft.Owin.Security.OpenIdConnect 中间件的响应中添加位置 header

c# - 在不指定元数据端点的情况下使用 OpenIdConnect

scala - Monads 在实践中作为 Monoids

haskell - 尝试在 Haskell 中为我的 Point3D 类型定义 Show 时出现问题

asp.net-mvc - 使用外部不记名 token (MVC4 Web Api) 登录 Facebook

c# - 如何从 IOwinContext 获取 HttpRequestBase