欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core基礎(chǔ)之中間件

 更新時間:2022年02月09日 11:35:30   作者:痕跡g  
這篇文章介紹了ASP.NET Core基礎(chǔ)之中間件,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

什么是ASP.NET Core Middleware?

ASP.NET Core中間件組件是被組裝到應(yīng)用程序管道中以處理HTTP請求和響應(yīng)的軟件組件(從技術(shù)上來說,組件只是C#類)。

ASP.NET Core應(yīng)用程序中的每個中間件組件都執(zhí)行以下任務(wù)。

  • 選擇是否將 HTTP 請求傳遞給管道中的下一個組件。這可以通過在中間件中調(diào)用下一個 next() 方法實現(xiàn)。
  • 可以在管道中的下一個組件之前和之后執(zhí)行工作。

在ASP.NET Core中,已經(jīng)有很多內(nèi)置的中間件組件可供使用,您可以直接使用它們。 如果需要,還可以在ASP.NET Core應(yīng)用程序中創(chuàng)建自己的中間件組件。

您需要牢記的最重要的一點(diǎn)是,在ASP.NET Core中,給定的中間件組件應(yīng)僅具有特定目的,即單一職責(zé)。

在ASP.NET Core應(yīng)用程序中使用中間件組件的一些示例如下:

  • 用于驗證用戶身份的中間件
  • 中間件可用于記錄請求和響應(yīng)
  • 用于處理錯誤的中間件
  • 用于處理靜態(tài)文件,例如圖像,Javascript或CSS文件的中間件
  • 用于在訪問特定資源時授權(quán)用戶的中間件

中間件組件是我們通常用于在ASP.NET Core應(yīng)用程序中建立請求處理管道的組件。

如果您使用過.NET Framework的早期版本,那么您可能知道,我們使用HTTP處理程序和HTTP模塊來設(shè)置請求處理管道。 正是此管道將確定如何處理HTTP請求和響應(yīng)。

如何在ASP.NET Core應(yīng)用程序中配置中間件組件?

在ASP.NET Core應(yīng)用程序中,我們需要在Startup.cs文件中存在的Startup類的Configure()方法內(nèi)配置中間件組件。

這是在應(yīng)用程序啟動時將要運(yùn)行的類。 當(dāng)我們使用空模板創(chuàng)建ASP.NET Core應(yīng)用程序時,默認(rèn)情況下,將使用Configure()方法創(chuàng)建Startup類,如下圖所示。

因此,每當(dāng)要在任何類型的.net核心應(yīng)用程序中配置任何中間件組件時,都需要通過在IApplicationBuilder對象上調(diào)用Use方法在Startup類的Configure() 方法中對其進(jìn)行配置。

如上圖所示,configuration() 方法使用三個中間件組件設(shè)置了請求處理管道,如下所示。

  • **UseDeveloperExceptionPage() **
  • **UseRouting() **
  • UseEndpoints()

在了解以上三個內(nèi)置的中間件組件之前。 首先讓我們了解什么是中間件組件,以及這些中間件組件如何在ASP.NET Core應(yīng)用程序中正常工作。

了解ASP.NET Core中的中間件組件

在ASP.NET Core應(yīng)用程序中,中間件組件可以訪問傳入的HTTP請求和傳出的HTTP響應(yīng)。 因此,ASP.NET Core中的中間件組件可以:

  • 通過生成HTTP響應(yīng)來處理傳入的HTTP請求。
  • 處理傳入的HTTP請求,對其進(jìn)行修改,然后將其傳遞給下一個中間件組件
  • 處理傳出的HTTP響應(yīng),進(jìn)行修改,然后將其傳遞給下一個中間件組件或ASP.NET Core Web服務(wù)器。

為了更好地理解,請查看下圖,該圖顯示了中間件組件如何在ASP.NET Core應(yīng)用程序的請求處理管道中使用。

如上圖所示,我們有一個日志記錄中間件組件。 該組件僅記錄請求時間,然后將請求傳遞到下一個中間件組件,即請求管道中的靜態(tài)文件中間件組件,以進(jìn)行進(jìn)一步處理。

ASP.NET Core中的中間件組件也可以通過生成HTTP響應(yīng)來處理HTTP請求。 ASP.NET Core中間件組件也可能決定不調(diào)用請求管道中的下一個中間件組件。 這個概念稱為短路請求管道。

例如,我們有一個靜態(tài)文件中間件組件。 并且,如果傳入的HTTP請求來自某些靜態(tài)文件,例如圖像,CSS文件,JavaScript等,則此Static Files Middleware組件可以處理請求,然后通過不調(diào)用管道中的下一個組件來縮短請求管道 即MVC中間件組件。

正如上面討論的,ASP.NET Core中間件組件可以訪問管道中的HTTP請求和響應(yīng)。 因此,中間件組件也可以處理傳出響應(yīng)。 例如,在我們的案例中,日志記錄中間件組件可能會記錄響應(yīng)發(fā)送回客戶端的時間。

ASP.NET Core應(yīng)用程序中中間件組件的執(zhí)行順序是什么?

了解中間件組件的執(zhí)行順序非常重要。 ASP.NET Core中間件組件的執(zhí)行順序與添加到管道中的順序相同。 因此,在將中間件組件添加到請求處理管道時,我們需要小心。

根據(jù)應(yīng)用程序的業(yè)務(wù)需求,您可以添加任意數(shù)量的中間件組件。

例如,如果您要開發(fā)具有某些靜態(tài)HTML頁面和圖像的靜態(tài)Web應(yīng)用程序,則在請求處理管道中可能僅需要“ StaticFiles”中間件組件。

但是,如果您正在開發(fā)安全的動態(tài)數(shù)據(jù)驅(qū)動的Web應(yīng)用程序,則可能需要幾個中間件組件,例如日志記錄中間件,身份驗證中間件,授權(quán)中間件,MVC中間件等。

什么是ASP.NET Core中的請求委托?

在ASP.NET Core中,請求委托用于構(gòu)建請求管道,即請求委托用于處理每個傳入的HTTP請求。 在ASP.NET Core中,可以使用“運(yùn)行”,“映射”和“使用”擴(kuò)展方法配置請求委托。

您可以使用嵌入式匿名方法(稱為嵌入式中間件)指定請求委托,也可以使用可重用的類指定請求委托。

這些可重用的類和嵌入式匿名方法稱為中間件或中間件組件。 請求處理管道中的每個中間件組件負(fù)責(zé)調(diào)用管道中的下一個組件,或者通過不調(diào)用下一個中間件組件來使管道短路。

Use and Run方法的用途是什么?

在ASP.NET Core中,可以使用“Use”和“Run”擴(kuò)展方法將內(nèi)聯(lián)中間件組件注冊到請求處理管道中。

“Run”擴(kuò)展方法使我們可以添加終止中間件(不會在請求處理管道中調(diào)用下一個中間件組件的中間件)。

另一方面,“Use”擴(kuò)展方法使我們可以添加中間件組件,該中間件組件可以在請求處理管道中調(diào)用下一個中間件組件。

如果您觀察Configure方法,那么您將看到它獲得了IApplicationBuilder接口的一個實例,并將該實例與諸如Use and Run之類的擴(kuò)展方法一起使用,它將配置中間件組件。

如您所見,在Configure方法中,使用IApplicationBuilder實例即app在請求處理管道中注冊了三個中間件組件。 他們?nèi)缦?

  • UseDeveloperExceptionPage()
  • UseRouting()
  • UseEndpoints()

UseDeveloperExceptionPage

如您所見,在Configure方法中,UseDeveloperExceptionPage() 中間件組件已注冊到管道中,并且僅在將托管環(huán)境設(shè)置為“Development”時,該中間件組件才會出現(xiàn)。

當(dāng)應(yīng)用程序中發(fā)生未處理的異常時,該中間件組件將執(zhí)行,并且由于它處于開發(fā)模式,因此它將向您顯示代碼的錯誤信息。 您也可以考慮將其替換為其它內(nèi)容。

UseRouting

該中間件組件用于將端點(diǎn)路由中間件添加到請求處理管道,即它將URL(或傳入的HTTP請求)映射到特定資源。

UseEndpoints

在此中間件中,將使用Map擴(kuò)展方法來做出路由決策。 以下是UseEndpoints中間件組件的默認(rèn)實現(xiàn)。 在MapGet擴(kuò)展方法中,我們指定了URL模式,例如“ /”。 這僅表示域名。

因此,只有域名的任何請求都將由該中間件處理。

除了MapGet,您還可以使用Map方法,如下所示。

MapGet和Map方法有什么區(qū)別?

MapGet方法將處理GET HTTP請求,而Map方法將處理所有類型的HTTP請求,例如GET,POST,PUT和DELETE等。

如何使用Run() 擴(kuò)展方法配置中間件組件?

首先我們需要了解如何使用“Run”擴(kuò)展方法創(chuàng)建和配置自定義中間件組件。 首先,注釋一下Configure方法中存在的所有代碼。

注釋現(xiàn)有代碼后,將以下代碼復(fù)制并粘貼到Configure方法中。 以下代碼只是向應(yīng)用程序的請求管道中添加了一個新的中間件組件,并僅打印了一條消息"My Name is Zhangsan"。

運(yùn)行后,輸出:

我們正在IApplicationBuilder實例(應(yīng)用程序)上調(diào)用Run() 擴(kuò)展方法,以將中間件組件注冊到請求處理管道中。 以下是Run方法的定義:

從Run() 方法的定義中可以看到,該方法被實現(xiàn)為IApplicationBuilder接口的擴(kuò)展方法。 這就是為什么我們能夠使用IApplicationBuilder實例即app調(diào)用Run() 方法的原因。

您還可以從上圖看到Run() 方法采用RequestDelegate類型的輸入?yún)?shù)。 以下是RequestDelegate的定義。

從上圖可以看到,RequestDelegate是一個采用HttpContext對象類型的輸入?yún)?shù)的委托。

正如我們上面討論的那樣,ASP.NET Core應(yīng)用程序中的中間件組件可以訪問HTTP請求和響應(yīng),這是因為上面的HttpContext對象。

在示例中,我們使用lambda表達(dá)式將請求委托內(nèi)聯(lián)作為匿名方法傳遞給內(nèi)聯(lián),此外,我們還將HTTPContext對象作為輸入?yún)?shù)傳遞給請求委托。 下圖顯示了以上內(nèi)容:

向該應(yīng)用程序再添加一個中間件。

運(yùn)行該應(yīng)用程序,則將獲得以下輸出:

My Name is Zhangsan

輸出來自第一個中間件組件。 原因是,當(dāng)我們使用Run() 擴(kuò)展方法注冊中間件組件時,該組件成為終端組件,這意味著它不會在請求處理管道中調(diào)用下一個中間件組件。

使用Use擴(kuò)展方法配置中間件組件

現(xiàn)在想到的問題是如何在請求處理管道中調(diào)用下一個組件,答案是使用Use擴(kuò)展方法注冊中間件組件,如下所示。

現(xiàn)在運(yùn)行該應(yīng)用程序,您將看到來自兩個中間件組件的預(yù)期輸出:

My Name is ZhangsanMy Name is LiSi

了解Use擴(kuò)展方法

Use擴(kuò)展方法將在行中定義的中間件委托添加到應(yīng)用程序的請求管道中。 以下是Use擴(kuò)展方法的定義:

此方法也實現(xiàn)為IApplicationBuilder接口上的擴(kuò)展方法。 這就是為什么我們能夠使用IApplicationBuilder實例調(diào)用此方法的原因。 從上面的定義可以看出,該方法采用兩個輸入?yún)?shù)。 第一個參數(shù)是HttpContext上下文對象,通過它可以訪問HTTP請求和響應(yīng)。 第二個參數(shù)是Func類型,即它是一個通用委托,可以處理請求或調(diào)用請求管道中的下一個中間件組件。

注意:如果要將請求從一個中間件發(fā)送到下一個中間件,則需要調(diào)用下一個方法。

到此這篇關(guān)于ASP.NET Core基礎(chǔ)之中間件的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET?MVC框架簡介

    ASP.NET?MVC框架簡介

    這篇文章介紹了ASP.NET?MVC框架,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • 如何在WebForm中使用javascript防止連打(雙擊)

    如何在WebForm中使用javascript防止連打(雙擊)

    如何在WebForm中使用javascript防止連打(雙擊)...
    2007-01-01
  • Blazor組件事件處理功能

    Blazor組件事件處理功能

    這篇文章介紹了Blazor組件的事件處理功能,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • ASP.NET?Core?Razor頁面用法介紹

    ASP.NET?Core?Razor頁面用法介紹

    這篇文章介紹了ASP.NET?Core?Razor頁面的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .NET2.0版本中基于事件的異步編程模式(EAP)

    .NET2.0版本中基于事件的異步編程模式(EAP)

    這篇文章介紹了.NET2.0版本中基于事件的異步編程模式(EAP),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 部署ASP.NET?Core程序到Windows系統(tǒng)

    部署ASP.NET?Core程序到Windows系統(tǒng)

    這篇文章介紹了部署ASP.NET?Core程序到Windows系統(tǒng)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • asp.net中的cookie使用介紹

    asp.net中的cookie使用介紹

    asp.net中的cookie使用介紹,這里腳本之家將一些asp.net中的cookie操作方法整理下,需要的朋友可以參考下
    2012-05-05
  • asp.net 專業(yè)源代碼打包工具

    asp.net 專業(yè)源代碼打包工具

    我想很多人都在網(wǎng)上下載過一些示例代碼,或者收到一些別人給的示例代碼。通常為了方便,都是打成一個壓縮包的形式
    2012-03-03
  • Json.Net6.0用法介紹

    Json.Net6.0用法介紹

    這篇文章介紹了Json.Net6.0的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值。需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-12-12
  • WPF使用ValidationRules對MVVM架構(gòu)數(shù)據(jù)驗證

    WPF使用ValidationRules對MVVM架構(gòu)數(shù)據(jù)驗證

    這篇文章介紹了WPF使用ValidationRules對MVVM架構(gòu)數(shù)據(jù)驗證的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論