14.ASP.NET Core請求處理管道

在這篇文章中,我將經過一個示例,來說解ASP.NET Core中的請求處理管道。在這篇文章中,咱們將討論下面幾個點:學習

  1. 理解ASP.NET Core請求處理管道
  2. 怎樣在ASP.NET中建立並註冊多箇中間件組件?
  3. 請求管道中,中間件執行的順序是咋樣的?

理解ASP.NET Core請求處理管道

爲了理解ASP.NET Core中的請求處理管道,咱們來修改一下Configure方法。這裏咱們向請求管道中註冊了三個中間件組件。正如你所見,前面兩個中間件是使用Use擴展方法註冊的,最後一個是使用Run擴展方法註冊的。ui

image

代碼解釋:命令行

首先咱們向Configure方法注入了日誌中間件,也就是ILogger<Startup>.  Program類中的Main方法調用 CreateDefaultBuilder方法,來配置日誌。日誌

ASP.NET Core Request Processing Pipeline ConfigureLogging

在上面圖片中,你能夠發現,日誌提供了Console、Debug、以及EventSource.在這篇例子中,我使用的日誌實例來記錄日誌。中間件

若是你是經過.NET Core CLI來運行程序的話,那麼你能夠在命令行窗口能夠看到日誌信息,若是你是經過Visual Studio來運行程序的話,你能夠在輸出窗口看到日誌信息。blog

如今運行程序就會發現:圖片

ASP.NET Core Request Processing Pipeline

你會看到輸出的順序:ip

Middleware1: Incoming Request
Middleware2: Incoming Request
Middleware3: Incoming Request handled and response generated
Middleware2: Outgoing Response
Middleware1: Outgoing Responseget

理解ASP.NET Core請求處理管道的執行順序

爲了理解這個,咱們看下,下面的這個圖:it

ASP.NET Core Request Processing pipeline Order

當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請求處理管道,但願能幫到你們。

相關文章
相關標籤/搜索