.NET

ASP.NET Web Api 2 Http消息生命周期

2018-09-03  本文已影响26人  陈弟CD

ASP.NET Web Api 2 Http 消息生命周期

IIS Hosting 与 OWIN Self-Hosting

HTTP Request

无论是以哪种方式运行,当接收到一个 HTTP Request 的时候,HTTP Request 消息在第一时间会被转化为一个 HttpRequestMessage 对象,这个 HttpRequestMessage 提供了对 HTTP 消息的强类型访问对象;

DelegatingHandler

HTTP message handles (HTTP 消息处理器)处于整个处理管道中的第一步,它们在进入时处理 HTTP 请求消息,在退出时处理 HTTP 响应消息。

如果想自定义一个 message handle (消息处理器),可以从 DelegatingHandler 这个类派生得到,并且可以添加多个自定义的消息处理器。

消息处理器可以是全局的,也可以是指定给特定的一个路由的。每个路由中的消息处理器仅在该对应的路由被相应的请求匹配的时候触发。所有的路由消息处理器在路由表中配置。

值得注意的是,消息处理器可以直接创建一个响应,使得管道中的其余操作都被跳过。

HttpRoutingDispatcher

如果Route.Handle为空,则进入 HttpControllerDispatcher ,否则进入 Per-route Message Handles 中进行路由处理器处理,再进入 HttpMessageHandler

HttpMessageHandler

HttpMessageHandler 消息处理器可以调用 HttpControllerDispatcher 并返回到主管道中,或者直接提供一个自定义的返回标志。

HttpControllerDispatcher

HttpControllerDispatcher 消息处理可以创建一个响应,使得管道中的其余操作都被跳过。
其主要的职责为创建 API 控制器



分两个步骤

激活控制器后进入控制器消息管道中

Select Controller Action


依据请求的 URL ,创建 Api 控制器,并选着对应的
Action,经由 IHttpActionInvoker 处理后返回 HttpActionDescriptor(Action的描述)

Authentication Filters

授权过滤器,请求进入后,如果对应的请求需要进行授权校验,则依据 Authentication Filters 来进行权限校验,同样的,如果授权失败,则授权过滤器会直接创建一个错误响应,使得管道中的其余操作都被跳过。
授权通过后,进入模型绑定。


Model Binding

模型绑定使用请求为 Action 的参数创建值。这些值在调用 Action 时传递给 Action 。



请求信息中包含了:

对应的绑定方式也有三种

接下来进入 Action 过滤器

Action Filter

Action Filter 会被调用两次,分别为 Action 执行前和 Action 执行之后。ActionFilterAttribute类中包含了 Action Filter 的两个方法(包含异步方法)

接下来就是进入到 Action 中

Invoke Action


调用 控制器的 Action ,使用 HttpActionContext 作为绑定和模型状态

如果发生异常,则进入 Exception Filter中

Exception Filters

未处理的异常会被路由到异常过滤器。
Exception Filter 会创建一个错误的响应,并结束此次请求过程。

Result Conversion

如果请求正确执行,就会进入到结果转换过程中



Action 的返回值会被转换为HttpResponseMessage。

如果返回的是 HttpResponseMessage,则直接通过

如果返回的是 void,那么会创建一个状态码为204的响应,表示执行成功且无返回值。

如果返回的是 IHttpActionResult,则会调用 ExecuteAync 去创建一个 HttpResponseMessage。

如果都不是以上三种类型,则一个 media-type 格式化程序序列化该值并将其写入消息体。

上一篇 下一篇

猜你喜欢

热点阅读