本文主要概述下ASP.NET Web API的运行框架,即从接收到一个HttpRequest到相应的过程。
API的框架主要如下图所示,主要由3层组成:hosting(宿主)、message handler(消息处理管道)和controller handler(控制器处理器)
最底层负责web api的宿主,例如这个接口在Web API和HTTP Runtime。简单说这个层负责创建HttpRequestMessage的实例,并且把他们推给上一层的消息处理管道;同时这层还负责把HttpResponseMessage返回给处理他们的管道。
一般有两个现成的hosting可选:SelfHost和WebHost。
SelfHost是基于WCF的,把Message换成HttpRequestMessage,并且推送到上层的消息处理管道。
WebHosting是基于HttpControllerHandler,把HttpRequest转成HttpRequestMessage。
WebAPI的宿主不限于这2个,还有一些社区贡献的,例如Louis Dejardin的OWIN 和 本文作者的一个host,基于Azure Service的。
中间层是由一个消息处理管道组成,类似于一个已有WCF Web API。这个管道暴露一个HttpServer类,他也扩展了HttpMessageHandler(组合模式)。
此管道提供了一些可扩展点,类似:日志、用户认证等。
在此管道上层有一个特别的handler:HttpControllerDispatcher。此handler是为此次请求负责获取、调用一个controller。
HttpControllerDispathcer仅在使用 controller-based programming model控制器基类编程模式(ApiController继承此类)时被使用。正常来说我们都是基于这个模式编码的。
最后,这最上层相当于controller的处理流程,就如:
Action selection
Filter 执行
Model binding
Action 调用
通过formatters输出内容
整个过程是在ApiController内部执行,由HttpControllerDispatcher调用。
很多地方加了链接提供了详细的信息,请随意留言吧。
原文: