天天看點

WebAPI-處理架構

帶着問題去思考,大家好!

問題1:HTTP請求和傳回相應的HTTP響應資訊之間發生了什麼?

WebAPI-處理架構

1:首先是最底層,托管層,位于WebAPI和底層HTTP棧之間

2:其次是 消息處理程式管道層,這裡比如日志和緩存。OWIN的引用是将消息處理程式管道的一些功能下移到棧下端的OWIN中間件了。

3:控制器處理,HTTP響應,參數的驗證和綁定。

托管層

首先是人生三大哲學問題;

1:是WebAPI和底層HTTP基礎結構的接口,分三類(Windows程序,[服務啊,控制台啊]&Web托管[Web hosting,IIS]&OWIN的相容伺服器[Katana])

2:它在架構最底層,托管層,位于WebAPI和底層HTTP棧之間

3:它的職責是負責API托管

比如:ASP.NET管道。HttpListener( HTTP 協定偵聽器,

https://docs.microsoft.com/zh-cn/dotnet/api/system.net.httplistener?redirectedfrom=MSDN&view=netframework-4.7.2

).OWIN宿主。

負責建立HttpRquestMessage,傳回HttpResponseMessage.轉換為底層網絡棧處理。

上面第二類,Web托管說下流程,托管層---HttControllerHandler---WebAPI管道,處理後的消息通過HttpResonseMessage執行個體複制為HttpResonse,然後在轉給Asp.Net管道

消息處理管道

這層跟中間件的概念差不多。它有個擴充點,攔截器。

比如:日志和緩存,Web伺服器網管接口,Python的WSGI.

首先要知道這幾個類,HttpMessageHandler,DelegatingHandler

WebAPI-處理架構

繼承Object---HttpMessageHandler--DelegatingHandle

r

--MessageProcessingHandler

抽象方法SendAsync接受HttpRequestMessage執行個體,傳回Task<HttpResponse Message>,異步生成一個HttpResponseMessage.這個方法是基于任務的異步模式。

消息處理程式還需要一個資料成員,儲存指向一個内部處理程式的指針和資料流邏輯,把請求和響應從一個處理程式委托給他的内部處理程式,DelegatingHandle

定義了InnerHandler屬性,将一個處理程式連接配接到其内部處理程式。

HttpConfiguration.MessageHandlers集合屬性定義了消息處理程式委托的順序。

路由分發

在消息處理程式末端。

有路由分發,HttpRoutingDispatcher類實作。根據比對的IHTTPRoute類選擇轉發請求所用的下一個處理程式

和控制器分發:HttpControllerDispatcher類實作。調用ExecuteAsync方法,傳入請求消息。

控制器處理

可以直接使用IHttpController,通常做法是從抽象類ApiController進行派生。

資料綁定:

ApiController.ExecuteAsync方法調用一系列HttpParameterBinding執行個體。将參數添加到HttpActionContext執行個體的ActionArguments字典中