亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

什么是ASP.NET Core Middleware?

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

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

  • 選擇是否將 HTTP 請(qǐng)求傳遞給管道中的下一個(gè)組件。這可以通過(guò)在中間件中調(diào)用下一個(gè) next() 方法實(shí)現(xiàn)。
  • 可以在管道中的下一個(gè)組件之前和之后執(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àn)證用戶身份的中間件
  • 中間件可用于記錄請(qǐng)求和響應(yīng)
  • 用于處理錯(cuò)誤的中間件
  • 用于處理靜態(tài)文件,例如圖像,Javascript或CSS文件的中間件
  • 用于在訪問(wèn)特定資源時(shí)授權(quán)用戶的中間件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

什么是ASP.NET Core中的請(qǐng)求委托?

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

您可以使用嵌入式匿名方法(稱(chēng)為嵌入式中間件)指定請(qǐng)求委托,也可以使用可重用的類(lèi)指定請(qǐng)求委托。

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

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

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

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

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

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

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

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

UseDeveloperExceptionPage

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

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

UseRouting

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

UseEndpoints

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

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

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

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

MapGet方法將處理GET HTTP請(qǐng)求,而Map方法將處理所有類(lèi)型的HTTP請(qǐng)求,例如GET,POST,PUT和DELETE等。

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

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

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

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

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

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

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

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

正如我們上面討論的那樣,ASP.NET Core應(yīng)用程序中的中間件組件可以訪問(wèn)HTTP請(qǐng)求和響應(yīng),這是因?yàn)樯厦娴腍ttpContext對(duì)象。

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

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

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

My Name is Zhangsan

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

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

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

現(xiàn)在運(yùn)行該應(yīng)用程序,您將看到來(lái)自?xún)蓚€(gè)中間件組件的預(yù)期輸出:

My Name is ZhangsanMy Name is LiSi

了解Use擴(kuò)展方法

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

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

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

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

相關(guān)文章

  • ASP.NET?MVC框架簡(jiǎn)介

    ASP.NET?MVC框架簡(jiǎn)介

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

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

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

    Blazor組件事件處理功能

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

    ASP.NET?Core?Razor頁(yè)面用法介紹

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

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

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

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

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

    asp.net中的cookie使用介紹

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

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

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

    Json.Net6.0用法介紹

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

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

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

最新評(píng)論