歡迎光臨
每天分享高質量文章

中間件是什麼?在.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()方法中的代碼。

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應用程式配置請求處理管道。

所以你看當一個架構師,玩好中間件就可以了。戲言而已,不必當真。。。

更多精彩內容都在視頻中哦~

    已同步到看一看
    赞(0)

    分享創造快樂