在這篇文章中,我將通過一個示例,來講解ASP.NET Core中的請求處理管道。在這篇文章中,我們將討論下麵幾個點:理解ASP.NET Core請求處理管道怎樣在ASP.NET中創建並註冊多個中間件組件?請求管道中,中間件執行的順序是咋樣的?理解ASP.NET Core請求處理管道為了理解ASP.N... ...
在這篇文章中,我將通過一個示例,來講解ASP.NET Core中的請求處理管道。在這篇文章中,我們將討論下麵幾個點:
- 理解ASP.NET Core請求處理管道
- 怎樣在ASP.NET中創建並註冊多個中間件組件?
- 請求管道中,中間件執行的順序是咋樣的?
理解ASP.NET Core請求處理管道
為了理解ASP.NET Core中的請求處理管道,我們來修改一下Configure方法。這裡我們向請求管道中註冊了三個中間件組件。正如你所見,前面兩個中間件是使用Use擴展方法註冊的,最後一個是使用Run擴展方法註冊的。
代碼解釋:
首先我們向Configure方法註入了日誌中間件,也就是ILogger<Startup>. Program類中的Main方法調用 CreateDefaultBuilder方法,來配置日誌。
在上面圖片中,你可以發現,日誌提供了Console、Debug、以及EventSource.在這篇例子中,我使用的日誌實例來記錄日誌。
如果你是通過.NET Core CLI來運行程式的話,那麼你可以在命令行視窗可以看到日誌信息,如果你是通過Visual Studio來運行程式的話,你可以在輸出視窗看到日誌信息。
現在運行程式就會發現:
你會看到輸出的順序:
Middleware1: Incoming Request
Middleware2: Incoming Request
Middleware3: Incoming Request handled and response generated
Middleware2: Outgoing Response
Middleware1: Outgoing Response
理解ASP.NET Core請求處理管道的執行順序
為了理解這個,我們看下,下麵的這個圖:
當HTTP請求來臨的時候,首先被中間件1發現,然後記錄日誌信息。一旦中間件1記錄了日誌信息,就會調用next方法,然後就調用中間件2.同樣中間件2,調用next方法,調用中間件3.因為中間件3是使用Run擴展方法註冊的。所以是個終結中間件。這個時候就會回傳,也就會列印Middleware2: Outgoing Response,以及Middleware1: Outgoing Response。
需要特別註意的是:
ASP.NET Core請求處理管道,是由一系列有序的中間件組件組成的,他們是一個接一個被調用的。每一個中間件組件可以在調用下一個中間件之前或者之後,執行一些操作。當一個中間件,不去調用下一個中間件,這被稱為請求管道短路。中間件可以獲取請求也可以處理響應。
你需要記住的是:中間件是按照你添加的順序執行的,然後響應剛好是相反的順序。
下篇文章中,我們將學習,ASP.NET Core中使用靜態中間件,處理靜態文件。這篇文章,我向大家解釋了,ASP.NET Core請求處理管道,希望能幫到大家。