本文出自《從零開始學ASP.NET CORE MVC》
推薦文章:ASP.NET Core appsettings.json檔案
ASP.NET Core 中的中介軟體(Middleware)
在這個影片中,我們將瞭解,ASP.NET Core 中的中介軟體是 什麼?中介軟體很重要,尤其是在你想當架構師這一條路上。
ASP.NET Core 中的中介軟體是 什麼?
在ASP.NET Core中,中介軟體(Middleware)是一個可以處理HTTP請求或響應的軟體管道。
ASP.NET Core中給中介軟體元件的定位是具有非常特定的用途。例如,我們可能有需要一個中介軟體元件驗證使用者,另一個中介軟體來處理錯誤,另一個中介軟體來提供靜態檔案,如JavaScript檔案,CSS檔案,圖片等等。
我們使用這些中介軟體元件在ASP.NET Core中設定請求處理管道。而正式這管道決定瞭如何處理請求。
而請求管道是由Startup.cs
檔案中的Configure()
方法進行配置,它也是應用程式啟動的一個重要部分。
以下是Configure()
方法中的程式碼。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
如您所見, 由空專案模板生成的Configure()
方法中的程式碼中,一個非常簡單的請求處理管道中,只有兩個中介軟體。
UseDeveloperExceptionPage
是一個中介軟體,第二個中介軟體是使用Run()
方法設定的。
現在,透過這個非常簡單的請求處理管道,我們所有的應用程式都可以將訊息寫入,然後在由瀏覽器顯示出來。
我們將在下一個影片中詳細介紹此方法中的程式碼。
現在讓我們瞭解什麼是中介軟體以及它在asp.net Core 中的工作原理。
下圖幫助我們瞭解中介軟體元件以及它們如何適應請求處理管道
中介軟體處理流程
在ASP.NET Core中,中介軟體元件可以同時訪問 – 傳入請求和傳出響應。
因此,中介軟體元件可以處理傳入請求並將該請求,傳遞給管道中的下一個中介軟體以進行進一步處理。
例如,如果您有一個日誌記錄中介軟體,它可能只是記錄請求的時間,它處理完畢後將請求傳遞給下一個中介軟體以進行進一步處理。
中介軟體元件可以處理請求, 並決定不呼叫管道中的下一個中介軟體,從而使管道短路,官方微軟給了一個英文的名字叫“terminal middleware ”
,翻譯為“終端中介軟體”。短路通常是被允許的,因為它可以避免一些不必要的工作。
例如, 如果請求的是像影象或 css 檔案這樣的靜態檔案, 則 StaticFiles 中介軟體可以處理和服務該請求並使管道中的其餘部分短路。這個意思就是說,在我們的示例中, 如果請求是針對靜態檔案, 則 Staticile 中介軟體不會呼叫 MVC 中介軟體,避免一些無謂的操作。
中介軟體元件可以透過傳入的HTTP請求來響應HTTP請求。例如,管道中的mvcmiddleware
處理對URL /students
的請求並傳回學生串列資訊。
隨著我們在本課程中的進展,在我們即將推出的影片中,我們將演示mvcmiddleware
在管道中如何進行請求和響應的。
中介軟體元件還可以處理傳出響應。例如,日誌記錄中介軟體元件可以記錄響應傳送的時間。此外,它還可以透過計算接收請求和響應傳送時間之間的差異來計算處理請求所花費的所有時間。
如果你使用過ABP框架,它的審計日誌功能是怎麼設計的,是否有了一些提示呢。
中介軟體元件是按照新增到管道的順序進行執行的。所以我們要註意以正確的順序新增中介軟體,否則應用程式可能無法按預期執行,哪怕編譯成功,但是程式還是會出錯。
在我們即將釋出的影片中,我們將透過一個示例,討論如果中介軟體元件未按正確順序新增到處理管道中會發生什麼。
中介軟體元件應該用NuGet包的形式提供。由NuGet處理更新,儘量將中介軟體拆的足夠小,提供每個中介軟體獨立更新的能力。
ABPVNext 就是這樣設計的,同樣,很多人吼的微服務就是在乾這個事情,另外變向說明瞭,我們很多的架構組就是在開發中介軟體而已。這些只是我的吐槽,如果你不懂ABP和ABPVnext,也不要緊。以後慢慢學。
根據您的程式要求,您可以向請求處理管道新增盡可能多的中介軟體元件。例如,如果您正在使用一些靜態HTML頁面和影象,開發簡單的Web應用程式,那麼您的請求處理管道可能只包含“StaticFiles”中介軟體。 這個就是模組化設計帶來的好處,讓每個人都像玩積木一樣。
另一方面,如果您正在開發一個安全的資料驅動設計的Web應用程式,那麼您可能需要幾個中介軟體元件,如StaticFiles中介軟體,身份驗證中介軟體,授權中介軟體,MVC中介軟體等。 資料驅動設計,可以簡單理解為複雜專案。
我想指出的是,系統是你的,你是系統的架構師, 您可以完全控制請求,處理管道中的配置。這也意味著, 從記憶體和效能的角度來看, 您只需為請求處理管道中的中介軟體元件支付流量費和伺服器開支就好了。
現在我們已經基本瞭解了什麼是中介軟體元件以及它們如何適應請求處理管道,在下一個影片中,我們將瞭解如何使用中介軟體元件為我們的ASP.NET Core應用程式配置請求處理管道。
所以你看當一個架構師,玩好中介軟體就可以了。戲言而已,不必當真。。。
更多精彩內容都在影片中哦~
朋友會在“發現-看一看”看到你“在看”的內容