自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用ASP.Net Core中的條件中間件?

譯文
開(kāi)發(fā) 后端
使用ASP.Net Core中的中間件時(shí),應(yīng)充分利用條件分支等高級(jí)操作。

 

[[273129]]

【51CTO.com快譯】ASP.Net Core是微軟的一種開(kāi)源跨平臺(tái)框架,具有可擴(kuò)展、精簡(jiǎn)化和模塊化的優(yōu)點(diǎn),可用于構(gòu)建高性能Web應(yīng)用程序。中間件組件可以用在ASP.Net Core請(qǐng)求管道中,定制處理請(qǐng)求和響應(yīng)的方式。

ASP.Net Core中間件組件還可用于檢查、路由或修改流經(jīng)管道的請(qǐng)求和響應(yīng)消息。本文討論了如何用ASP.Net Core中的中間件執(zhí)行一些高級(jí)操作。

創(chuàng)建ASP.Net Core MVC項(xiàng)目

首先,不妨在Visual Studio中創(chuàng)建一個(gè)ASP.Net Core項(xiàng)目。假設(shè)你的系統(tǒng)中已安裝Visual Studio 2017或Visual Studio 2019,按照下列步驟,在Visual Studio中創(chuàng)建一個(gè)新的ASP.Net Core項(xiàng)目。

  1. 啟動(dòng)Visual Studio IDE。
  2. 點(diǎn)擊“創(chuàng)建新項(xiàng)目”。
  3. 在“創(chuàng)建新項(xiàng)目”窗口中,從顯示的模板列表中選擇“ASP.Net Core Web應(yīng)用程序”。
  4. 點(diǎn)擊“下一步”。
  5. 在“配置新項(xiàng)目”窗口中,指定新項(xiàng)目的名稱和位置。
  6. 點(diǎn)擊“創(chuàng)建”。
  7. 在接下來(lái)顯示的“創(chuàng)建新的ASP.Net Core Web應(yīng)用程序”中,從頂部的下拉列表中選擇.Net Core作為運(yùn)行時(shí)環(huán)境和ASP.Net Core 2.2(或更高版本)。
  8. 選擇“Web應(yīng)用程序(模型-視圖-控制器)”作為項(xiàng)目模板,創(chuàng)建一個(gè)新的ASP.Net Core應(yīng)用程序。
  9. 確保“啟用Docker支持”和“針對(duì)HTTPS的配置”復(fù)選框未勾選,因?yàn)槲覀冊(cè)诖颂幉粫?huì)使用那些功能。
  10. 確保身份驗(yàn)證設(shè)置為“無(wú)身份驗(yàn)證”,因?yàn)槲覀円膊粫?huì)使用身份驗(yàn)證。
  11. 點(diǎn)擊“創(chuàng)建”。

遵循這些步驟應(yīng)該可以在Visual Studio中創(chuàng)建一個(gè)新的ASP.Net Core項(xiàng)目。我們將在本文的后續(xù)部分中使用該項(xiàng)目。

ASP.Net Core中的Use、Run和Map等方法

Use、Map和Run等方法用于在ASP.Net Core中配置HTTP管道。下面簡(jiǎn)要介紹這每個(gè)方法及用途。

  • Use——該方法將執(zhí)行委托(delegate),然后進(jìn)入到管道中的下一步。Use方法還可用于使管道短路。
  • Run——該方法將執(zhí)行委托并返回結(jié)果。
  • Map——該方法將有條件地執(zhí)行委托并返回結(jié)果。

ASP.Net Core中注冊(cè)中間件

ASP.Net Core中的中間件組件在Startup類的Configure方法中注冊(cè)。Use *擴(kuò)展方法用于注冊(cè)中間件。下面是注冊(cè)中間件組件的語(yǔ)法。 

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
  2.  
  3. app.UseMyCustomMiddleware();  

值得一提的是,中間件組件按它們注冊(cè)的順序來(lái)加以執(zhí)行。

ASP.Net Core中的Invoke方法

每個(gè)中間件組件都包含一個(gè)Invoke方法。該方法接受對(duì)HttpContext實(shí)例的引用作為實(shí)參。中間件組件可以在調(diào)用下一個(gè)中間件組件前后執(zhí)行操作。下面是典型的Invoke方法的示例: 

  1. public async Task Invoke(HttpContext context)  
  2.  
  3. // Write code here that will be executed before the  
  4. // next middleware is called  
  5. await _next.Invoke(context); // call next middleware  
  6. // Write code here that will be executed after the  
  7. //next middleware is called  

ASP.Net Core中使HTTP管道分支

Map擴(kuò)展方法(即Map和MapWhen)用于使管道分支。Map用于基于特定的請(qǐng)求路徑來(lái)分支,而MapWhen用于基于特定斷言的結(jié)果來(lái)分支。

下列代碼片段表明了Map方法如何用于使請(qǐng)求管道分支。 

  1. public class Startup  
  2.  
  3. private static void MapRequestA(IApplicationBuilder app)  
  4.  
  5. app.Run(async context =>  
  6.  
  7. await context.Response.WriteAsync("This is MapRequestA");  
  8. });  
  9.  
  10. private static void MapRequestB(IApplicationBuilder app)  
  11.  
  12. app.Run(async context =>  
  13.  
  14. await context.Response.WriteAsync("This is MapRequestB");  
  15. });  
  16.  
  17. private static void MapRequestC(IApplicationBuilder app)  
  18.  
  19. app.Run(async context =>  
  20.  
  21. await context.Response.WriteAsync("This is MapRequestC");  
  22. });  
  23.  
  24. public void Configure(IApplicationBuilder app)  
  25.  
  26. app.Map("/mapRequestPathA", MapRequestA);  
  27. app.Map("/mapRequestPathB", MapRequestB);  
  28. app.Map("/mapRequestPathB", MapRequestC);  
  29. app.Run(async context =>  
  30.  
  31. await context.Response.WriteAsync("Hello World!");  
  32. });  
  33.  
  34. //Other methods  

MapWhen方法接受兩個(gè)參數(shù):

  • Func
  • 委托操作

你可以在Startup類的Configure方法中使用下列代碼片段,不允許內(nèi)容類型“text/html”。 

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
  2.  
  3. if (env.IsDevelopment())  
  4.  
  5. app.UseDeveloperExceptionPage();  
  6.  
  7. app.MapWhen(context => context.Request.ContentType.Equals  
  8. ("text/xml", StringComparison.InvariantCultureIgnoreCase),  
  9. (IApplicationBuilder applicationBuilder) =>  
  10.  
  11. applicationBuilder.Run(async context =>  
  12.  
  13. await Task.FromResult(context.Response.StatusCode = StatusCodes.Status406NotAcceptable);  
  14. });  
  15. });  
  16. app.UseMvc();  

ASP.Net Core中的UseWhen方法

UseWhen方法可用于有條件地執(zhí)行中間件。下列代碼片段表明了如果請(qǐng)求路徑以“/api”開(kāi)頭,UseWhen方法如何用于執(zhí)行中間件組件。 

  1. app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), applicationBuilder =>  
  2.  
  3. applicationBuilder.UseCustomMiddleware();  
  4. }); 

請(qǐng)注意:與MapWhen不同,UseWhen方法繼續(xù)執(zhí)行后一個(gè)中間件,不管UseWhen斷言是真還是假。不妨通過(guò)示例了解這一點(diǎn)??紤]下面這部分代碼: 

  1. app.UseMiddlewareA(); 
  2. app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), applicationBuilder =>  
  3.  
  4. applicationBuilder.UseMiddlewareB();  
  5. });  
  6. app.UseMiddlewareC(); 

如果中間件沒(méi)有短路,中間件A和C將始終執(zhí)行。只有請(qǐng)求路徑以“/api”開(kāi)關(guān),中間件B才會(huì)執(zhí)行。

在ASP.Net Core中,請(qǐng)求處理管道中有一連串中間件組件。所有請(qǐng)求和響應(yīng)都流經(jīng)該管道。新請(qǐng)求進(jìn)入后,這些中間件組件或處理請(qǐng)求,或?qū)⒄?qǐng)求傳遞到管道中的下一個(gè)組件。想完成更復(fù)雜的請(qǐng)求處理,我們可以使用Map和MapWhen方法使管道分支,使用UseWhen有條件地執(zhí)行中間件。

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

責(zé)任編輯:龐桂玉 來(lái)源: 51CTO
相關(guān)推薦

2021-01-26 14:57:00

中間件應(yīng)用模塊化

2024-07-12 08:19:53

2023-10-18 07:32:27

中間件技術(shù)HTTP請(qǐng)求

2025-03-26 07:53:24

2024-06-12 13:02:47

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-03-17 09:45:31

LazyCacheWindows

2021-02-02 16:19:08

Serilog日志框架

2021-02-19 06:54:33

配置系統(tǒng)ASP.NET Cor

2021-01-28 22:39:35

LoggerMessa開(kāi)源框架

2021-01-07 07:39:07

工具接口 Swagger

2021-01-31 22:56:50

FromServiceASP

2021-02-03 13:35:25

ASPweb程序

2021-03-03 22:37:16

MediatR中介者模式

2021-03-10 09:40:43

LamarASP容器

2021-02-28 20:56:37

NCache緩存框架

2024-05-13 09:32:06

攔截器HTTP中間件

2021-02-07 17:29:04

監(jiān)視文件接口

2020-08-19 08:39:05

中間件前端設(shè)計(jì)模式

2021-03-04 11:10:29

容器化Docker虛擬機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)