ASP.NET Web API 處理架構(gòu)
這篇文章主要是介紹ASP.NET Web API的處理架構(gòu):當(dāng)一個(gè)HTTP請(qǐng)求到達(dá)直到產(chǎn)生一個(gè)請(qǐng)求的過(guò)程。ASP.NET Web API 的處理架構(gòu)圖如下,主要有三層組成:宿主(hosting),消息處理管道(message handler pipeline)和控制器處理(controller handling).
宿主(Hosting)
底層負(fù)責(zé)Web API的宿主,Web API之間的接口和HTTP 處理引擎。一句話(huà),這一層負(fù)責(zé)創(chuàng)建HttpRequestMessage實(shí)例。然后把他們推入到上層的消息處理管道。宿主層也負(fù)責(zé)消息處理管道返回的HttpResponseMessage 。目前在ASP.NET Web API里頭已經(jīng)內(nèi)建的宿主選項(xiàng)有2個(gè):self-hosting 和 web hosting, web hosting也就是宿主在IIS的ASP.net 的處理管道里,Self-hosting 是基于WCF channel stack,的 WCF Message 實(shí)例 ,然后轉(zhuǎn)換到 HttpRequestMessage 實(shí)例然后把他們推給上層的消息處理管道。 Web-hosting 是基于IHttpAsyncHandler, 命名為 HttpControllerHandler, 它把 HttpRequest 轉(zhuǎn)換為HttpRequestMessage.當(dāng)然Web API hosting 是可擴(kuò)展的,不僅僅局限于這兩個(gè)選項(xiàng),你可以根據(jù)自己的需求定制,社區(qū)已經(jīng)有人實(shí)現(xiàn)第三方的宿主Louis DeJardin在OWIN created a host 。
消息處理管道(Message Handler Pipeline)
中間層是 message handler pipeline,這一部分就是 WCF Web API 的內(nèi)容了,通過(guò) HttpServer 類(lèi)暴露, 他也擴(kuò)展了 HttpMessageHandler 。這條管道提供了中間層的各種擴(kuò)展點(diǎn)(addressing cross-cutting concerns)例如: 日志, HTTP 驗(yàn)證, ……
通常在這個(gè)管道的頂端是一個(gè)特殊的處理器: HttpControllerDispatcher。這個(gè)處理器負(fù)責(zé)獲取和調(diào)用 一個(gè) 控制器(Controler) 處理請(qǐng)求。只是在使用基于控制器的編程模型(ApiController的派生類(lèi))的時(shí)候才使用HttpControllerDispatcher ,也可以使用完全不同的模型,只需要把最頂端的這個(gè)消息處理器替換掉就可以哦。
控制器處理(Controller Handling)
最后, 上層的控制器處理相關(guān)的流程,即:
- Action selection;
- Filter execution;
- Model binding;
- Action invocation;
- Response content creation via formatters.
這些處理過(guò)程都在 ApiController 實(shí)例里頭完成, 被 HttpControllerDispatcher所調(diào)用。
上面的整個(gè)處理流程還是非常清晰地,本文只是簡(jiǎn)單的介紹下整個(gè)處理流程,后續(xù)的文章詳細(xì)介紹各個(gè)部分。
歡迎大家掃描下面二維碼成為我的客戶(hù),扶你上云


浙公網(wǎng)安備 33010602011771號(hào)