ASP.NET Web API 处理架构

Posted 张善友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET Web API 处理架构相关的知识,希望对你有一定的参考价值。

这篇文章主要是介绍ASP.NET Web API的处理架构:当一个HTTP请求到达直到产生一个请求的过程。ASP.NET Web API 的处理架构图如下,主要有三层组成:宿主(hosting),消息...

这篇文章主要是介绍ASP.NET Web API的处理架构:当一个HTTP请求到达直到产生一个请求的过程。​​ASP.NET Web API​​ 的处理架构图如下,主要有三层组成:宿主(hosting),消息处理管道(message handler pipeline)和控制器处理(controller handling).

ASP.NET

​ 

宿主(Hosting)

底层负责Web API的宿主,Web API之间的接口和​​HTTP​​​ 处理引擎。一句话,这一层负责创建​​HttpRequestMessage​​​实例。然后把他们推入到上层的消息处理管道。宿主层也负责消息处理管道返回的​​HttpResponseMessage​​ 。目前在ASP.NET Web API里头已经内建的宿主选项有2个:self-hosting 和 web hosting, web hosting也就是宿主在IIS的ASP.net 的处理管道里,Self-hosting 是基于WCF channel stack,的 WCF ​​Message​​​ 实例  ,然后转换到 ​​HttpRequestMessage​​ 实例然后把他们推给上层的消息处理管道。 Web-hosting 是基于​​IHttpAsyncHandler​​​, 命名为 ​​HttpControllerHandler​​​, 它把 ​​HttpRequest​​​ 转换为​​HttpRequestMessage​​​.当然Web API hosting 是可扩展的,不仅仅局限于这两个选项,你可以根据自己的需求定制,社区已经有人实现第三方的宿主​​Louis DeJardin​​​在​​OWIN​​​ ​​created a host​​ 。 

消息处理管道(Message Handler Pipeline)

中间层是 message handler pipeline,这一部分就是 ​​WCF Web API​​​ 的内容了,通过 ​​HttpServer​​​ 类暴露, 他也扩展了 ​​HttpMessageHandler​​​ 。这条管道提供了中间层的各种扩展点(​​addressing cross-cutting concerns​​)例如: 日志, HTTP 验证, ……

通常在这个管道的顶端是一个特殊的处理器: ​​HttpControllerDispatcher​​​。这个处理器负责获取和​​调用​​​ 一个  ​​控制器(Controler)​​​ 处理请求。只是在使用基于控制器的编程模型(​​ApiController​​​的派生类)的时候才使用​​HttpControllerDispatcher​​ ,也可以使用完全不同的模型,只需要把最顶端的这个消息处理器替换掉就可以哦。

控制器处理(Controller Handling)

最后, 上层的控制器处理相关的流程,即:

这些处理过程都在 ​​ApiController​​​ 实例里头完成, 被 ​​HttpControllerDispatcher​​所调用。

上面的整个处理流程还是非常清晰地,本文只是简单的介绍下整个处理流程,后续的文章详细介绍各个部分。




以上是关于ASP.NET Web API 处理架构的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web API 处理异常返回错误状态码

ASP.Net Web API 架构选择

ASP.NET Core Web API - JWT 消息处理程序 - 没有注册类型错误

ASP.NET Web API 记录请求响应数据到日志的一个方法

如何使用 asp.net Web API 2(使用 TPL/Reactive)缓冲和批处理 REST 获取查询?

Asp.Net Web API 2第七课——Web API异常处理