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 hotel
媒體類型解析。
3)篩選器。
IActionFilter接口,權限驗證等。
----------------
核心對象介紹:
HttpMessageHandler 核心類,針對請求的處理實現在SendAsync中,針對響應的處理通過返回類型Task<HttpResponseMessage>完成 HttpRequestMessage Content屬性封裝Http主體信息 HttpResponseMessage StatusCode、ReasonPhrase屬性表示響應狀態碼與描述 DelegatingHandler 用於構建處理鏈,通過InnerHanlder屬性進行傳遞,是責任鏈模式的實現 HttpServer Dispatcher屬性指向最終的分發器對象,Configuration屬性包含了所有的配置信息。 HttpConfiguration全局配置信息:托管層、消息處理程序管道層、控制器處理層等配置。