中间件是什么?在.NET Core中的工作原理又是怎样的呢?
本文出自《從零開始學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()方法中的代碼。
{
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應用程序配置請求處理管道。
所以你看當一個架構師,玩好中間件就可以了。戲言而已,不必當真。。。
更多精彩內容都在視頻中哦~
硬廣專區
如果您覺得我的文章質量還不錯,歡迎打賞,也可以訂閱我的視頻哦
未得到授權不得擅自轉載本文內容,52abp.com保留版權
文字版目錄:?https://www.52abp.com/Wiki/mvc/latest/1.Intro?
交流QQ群:952387474《微軟MVP帶你學ASP.NET?CORE》
【收費】騰訊課堂:?https://ke.qq.com/course/392589?tuin=2522cdf3?
【免費】youtube視頻專區:http://t.cn/Ei0F2EB?
免費的更新慢,收費的更新快,僅此而已。就這樣。?
「好看」的人都【在看】↓↓↓
總結
以上是生活随笔為你收集整理的中间件是什么?在.NET Core中的工作原理又是怎样的呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker最全教程之Python爬网实
- 下一篇: 使用 DotNet CLI 创建自定义的