這篇文章中,我將帶領大家一起詳細學習:ASP.NET Core Middleware Components.這篇文章中,我將詳細討論下面幾個問題:
- 什么是ASP.NET Core 中的中間件組件?
- ASP.NET Core應用程式中,在哪里來使用中間件組件?
- 怎樣來配置ASP.NET Core 應用程式中的中間件組件?
- 使用中間件組件的例子有哪些?
- ASP.NET Core應用程式中,中間件組件執行的順序是?
什么是ASP.NET Core中間件組件?
ASP.NET Core中間件組件就是組裝到應用程式中,處理HTTP請求和回應的軟體組件(C# Classes),每一個中間件組件執行下面的任務:
- 選擇是否將HTTP請求傳遞給管道中的下一個組件
- 可以在管道中的下一個組件之前和之后執行作業
在ASP.NET Core中,已經有很多中間件組件,你可以直接拿去使用了,如果你愿意,還可以創建自己的中間件組件,你需要特別記住的一點就是:在ASP.NET Core 中一個中間件組件只做一個特定的事情,
在ASP.NET Core應用程式中,我們在哪里使用中間件組件呢?
下面是一些在ASP.NET Core應用程式中使用中間件組件的例子:
- 我們可能有一個中間件組件,用于用戶身份驗證
- 另外的中間件組件,用來記錄請求和回應
- 同樣,我們還有中間件組件用來處理例外
- 我們可能有中間件組件,來處理靜態檔案,例如:images、javascript、或者css檔案等等
- 可能還有一個中間件組件,用來授權用戶可以訪問特定的資源
中間件組件是我們在ASP.NET Core中用來處理請求管道的組件,如果你了解過之前版本的.NET Framework,你就會知道,我們是使用Http Handlers和Http Moudles來處理請求和回應的,并且這兩個將決定如何處理HTTP請求和回應,
怎樣在ASP.NET Core應用程式中配置中間件組件?
在ASP.NET Core應用程式中,你需要使用Startup類檔案中的Configure方法來配置中間件組件,這個Statrup在程式啟動的時候,會執行,我們打開之前用空模板建的ASP.NET Core應用程式:

因此,不管你啥時候想要配置中間件組件,你都需要在Configure方法中,呼叫IApplicationBulider介面的UseXXX方法,在上面的圖片中,你可以看到,使用了UseDeveloperExceptionPage中間件組件,
在接下來的文章中,我將詳細介紹這個中間件組件,現在我們來好好理解一下,什么是中間件組件,以及它們如何作業的,
理解ASP.NET Core中的中間件組件
下面的圖片解釋了什么是中間件組件,以及它們怎么用在ASP.NET Core請求處理管道中的,

在ASP.NET Core應用程式中,中間件組件可以同時獲取傳入的HTTP請求以及傳出的HTTP回應,所以一個中間件組件可以做下面的事情:
- 處理HTTP請求,生成HTTP回應
- 處理HTTP請求,修改請求,并傳遞給下一個中間件組件
- 處理HTTP回應,修改回應,傳遞給下一個中間件組件或者傳遞給ASP.NET Core Web服務器
使用中間件組件的例子
上面的圖片中,我們看到有了一個日志記錄的中間件組件,這個組件是簡單的記錄請求的時間,并且將其傳遞給下一個中間件組件,也就是靜態檔案中間件組件,來做進一步的處理,
ASP.NET Core中的中間件組件,可能同樣處理HTTP請求,并生成回應報文,ASP.NET Core中間件組件,同樣可以選擇,不去呼叫下一個中間件組件,這個概念稱為請求管道短路,
例如,我們有一個靜態檔案的中間件組件,如果有請求,要獲取靜態檔案,靜態檔案中間件組件就會去處理這個請求,處理完之后,靜態檔案中間件組件,不傳遞給下一個中間件組件(MVC中間件組件),這就稱為請求管道短路,
我們已經知道了,ASP.NET Core中間件組件可以同時獲取HTTP請求和HTTP回應,所以中間件組件也可以處理傳出的回應,例如,日志組件可能記錄時間,然后這個發送回應給客戶端,
什么是中間件組件執行的順序?
理解中間件組件執行的順序非常重要!ASP.NET Core中間件組件執行的順序,就是按照他們添加的順序來的,所以我們需要格外注意,添加中間件的時候的順序,
作為應用程式業務的需要,你可能會添加很多的中間件組件,例如,如果你開發靜態檔案的網站,那么你就需要靜態中間件組件,
但是如果你開發動態的資料驅動的網站程式,那么你可能會添加,諸如:日志中間件、身份驗證中間件、授權中間件、MVC中間件等等,
在我們下篇文章中,我將詳細介紹如何配置中間件組件,這篇文章,只是介紹了中間件組件的一些常用概念,希望你能理解!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/47006.html
標籤:.NET Core
