帶著問題去思考,大家好!
問題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字典中
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/7.html
標籤:ASP.NET
上一篇:iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射
下一篇:微信門戶開發框架-使用指導說明書