帶着問題去思考,大家好!
問題1:HTTP請求和傳回相應的HTTP響應資訊之間發生了什麼?

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
繼承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字典中