WebApi框架,可分为三层:托管层、消息处理程序托管层、控制器处理层。
一、托管层:
即Host,是WebAPI宿主,如:控制台,Windows服务等。
寄宿方式。
1、定制托管。
2、自托管。
3、Web托管
Owin寄宿 ,如Katana, 在一个Owin兼容的服务器上建立一个WebApi层,生成HttRequestMessage,WebApi处理完毕后,把HttpResponseMessage写入 Owin上下文。
WebApi相关对象(负责框架与外表数据交换的载体,Http包的托管封装):
1)HttRequestMessage
WebAPI封装的请求对象(从Http请求包解析而来,对应之前HttpWebRequest,在System.Net.Http中)
2)HttpResponseMessage
WebAPI封装的返回对象(从托管代码最终生成的http返回请求对象,由框架转换为http响应包)。
二、消息处理程序托管层
HttpServer:WebApi 消息处理通道,可在此出添加扩展处理程序,如代理,网关,缓存处理,访问记录。
核心对象:HttpMessageHandler 类。
DelegatingHandler抽象类, 用于构建处理链,通过InnerHanlder属性进行传递,是责任链模式实现。
处理流程:
1 HttpRequestMessage
2、myDelegatingHandler1
myDelegatingHandler2
myDelegatingHandler3
3、路由分发处理程序
1)控制器选择(HttpRoutingDispacher)
4、控制分发处理程序
1)控制器选择(HttpControllerDispacher)
ControllerSelector (工厂模式实现)=> ControllerDescription (工厂模式实现)。
2)错误处理。
5、HttpResponseMessage
4、=> 3、=> 2、=> 5、
三、控制器处理层
1、根据上下文信息,定位控制器中要请求的方法;
ApiController
实现IHttpController接口。
功能:身份认证,授权认证,模型检查。
1)格式化
2)模型绑定
参数映射为对象模型,如 Hotel类型
媒体类型解析。
3)筛选器。
IActionFilter接口,权限验证等。
—————-
核心对象介绍:
HttpMessageHandler | 核心类,针对请求的处理实现在SendAsync中,针对响应的处理通过返回类型Task<HttpResponseMessage>完成 |
HttpRequestMessage | Content属性封装Http主体信息 |
HttpResponseMessage | StatusCode、ReasonPhrase属性表示响应状态码与描述 |
DelegatingHandler | 用于构建处理链,通过InnerHanlder属性进行传递,是责任链模式的实现 |
HttpServer | Dispatcher属性指向最终的分发器对象,Configuration属性包含了所有的配置信息。 |
HttpConfiguration |
全局配置信息:托管层、消息处理程序管道层、控制器处理层等配置。 |