帶著問題去思考,大家好! 問題1:HTTP請求和返回相應的HTTP響應信息之間發生了什麼? 1:首先是最底層,托管層,位於WebAPI和底層HTTP棧之間 2:其次是 消息處理程式管道層,這裡比如日誌和緩存。OWIN的引用是將消息處理程式管道的一些功能下移到棧下端的OWIN中間件了。 3:控制器處理 ...
帶著問題去思考,大家好!
問題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--DelegatingHandler--MessageProcessingHandler
抽象方法SendAsync接受HttpRequestMessage實例,返回Task<HttpResponse Message>,非同步生成一個HttpResponseMessage.這個方法是基於任務的非同步模式。
消息處理程式還需要一個數據成員,保存指向一個內部處理程式的指針和數據流邏輯,把請求和響應從一個處理程式委托給他的內部處理程式,DelegatingHandler定義了InnerHandler屬性,將一個處理程式連接到其內部處理程式。
HttpConfiguration.MessageHandlers集合屬性定義了消息處理程式委托的順序。
路由分發
在消息處理程式末端。
有路由分發,HttpRoutingDispatcher類實現。根據匹配的IHTTPRoute類選擇轉發請求所用的下一個處理程式
和控制器分發:HttpControllerDispatcher類實現。調用ExecuteAsync方法,傳入請求消息。
控制器處理
可以直接使用IHttpController,通常做法是從抽象類ApiController進行派生。
數據綁定:
ApiController.ExecuteAsync方法調用一系列HttpParameterBinding實例。將參數添加到HttpActionContext實例的ActionArguments字典中