成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

 

[[273129]]

【51CTO.com快譯】ASP.Net Core是微軟的一種開源跨平臺(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. 在接下來顯示的“創(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è)置為“無身份驗(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è)中間件組件的語法。 

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

值得一提的是,中間件組件按它們注冊(cè)的順序來加以執(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)求路徑來分支,而MapWhen用于基于特定斷言的結(jié)果來分支。

下列代碼片段表明了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”開頭,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斷言是真還是假。不妨通過示例了解這一點(diǎn)。考慮下面這部分代碼: 

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

如果中間件沒有短路,中間件A和C將始終執(zhí)行。只有請(qǐng)求路徑以“/api”開關(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é)任編輯:龐桂玉 來源: 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-03-17 09:45:31

LazyCacheWindows

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-02-02 16:19:08

Serilog日志框架

2021-03-10 09:40:43

LamarASP容器

2021-02-28 20:56:37

NCache緩存框架

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-07 07:39:07

工具接口 Swagger

2021-03-03 22:37:16

MediatR中介者模式

2021-01-31 22:56:50

FromServiceASP

2021-02-19 06:54:33

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

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)

主站蜘蛛池模板: 欧美高清一级片 | 久久国产精品免费一区二区三区 | 91欧美精品 | 国产一区二区三区在线 | 国产精品久久久久一区二区三区 | 日韩一二三区视频 | 国产高清自拍视频在线观看 | 中文字幕视频在线 | 欧美日韩一区二区在线 | 91视频官网 | 精品国产一区二区国模嫣然 | www.中文字幕.com | 波多野结衣一区二区 | 日韩欧美视频网站 | 国产欧美一区二区精品忘忧草 | 一区二区三区在线免费观看 | 久久久精品国产 | 免费成人高清 | 天天操天天拍 | 日韩欧美大片 | 99久久国产综合精品麻豆 | 亚洲精品一区在线观看 | 精品亚洲91 | 国产精品一区二区三区在线 | 国产精品久久国产精品久久 | 久久久久久蜜桃一区二区 | 一区二区三区在线免费 | 精品久久久久久亚洲精品 | 国产激情视频在线观看 | 久久午夜精品 | 免费看大片bbbb欧美 | 秋霞影院一区二区 | 区一区二区三在线观看 | 日本精品久久久久久久 | 最新91在线 | 国产福利91精品一区二区三区 | 小早川怜子xxxxaⅴ在线 | 色偷偷噜噜噜亚洲男人 | 成人午夜精品一区二区三区 | 伊人二区| 亚洲精品一二区 |