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

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

譯文
開發 后端
使用ASP.Net Core中的中間件時,應充分利用條件分支等高級操作。

 

[[273129]]

【51CTO.com快譯】ASP.Net Core是微軟的一種開源跨平臺框架,具有可擴展、精簡化和模塊化的優點,可用于構建高性能Web應用程序。中間件組件可以用在ASP.Net Core請求管道中,定制處理請求和響應的方式。

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

創建ASP.Net Core MVC項目

首先,不妨在Visual Studio中創建一個ASP.Net Core項目。假設你的系統中已安裝Visual Studio 2017或Visual Studio 2019,按照下列步驟,在Visual Studio中創建一個新的ASP.Net Core項目。

  1. 啟動Visual Studio IDE。
  2. 點擊“創建新項目”。
  3. 在“創建新項目”窗口中,從顯示的模板列表中選擇“ASP.Net Core Web應用程序”。
  4. 點擊“下一步”。
  5. 在“配置新項目”窗口中,指定新項目的名稱和位置。
  6. 點擊“創建”。
  7. 在接下來顯示的“創建新的ASP.Net Core Web應用程序”中,從頂部的下拉列表中選擇.Net Core作為運行時環境和ASP.Net Core 2.2(或更高版本)。
  8. 選擇“Web應用程序(模型-視圖-控制器)”作為項目模板,創建一個新的ASP.Net Core應用程序。
  9. 確保“啟用Docker支持”和“針對HTTPS的配置”復選框未勾選,因為我們在此處不會使用那些功能。
  10. 確保身份驗證設置為“無身份驗證”,因為我們也不會使用身份驗證。
  11. 點擊“創建”。

遵循這些步驟應該可以在Visual Studio中創建一個新的ASP.Net Core項目。我們將在本文的后續部分中使用該項目。

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

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

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

ASP.Net Core中注冊中間件

ASP.Net Core中的中間件組件在Startup類的Configure方法中注冊。Use *擴展方法用于注冊中間件。下面是注冊中間件組件的語法。 

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

值得一提的是,中間件組件按它們注冊的順序來加以執行。

ASP.Net Core中的Invoke方法

每個中間件組件都包含一個Invoke方法。該方法接受對HttpContext實例的引用作為實參。中間件組件可以在調用下一個中間件組件前后執行操作。下面是典型的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擴展方法(即Map和MapWhen)用于使管道分支。Map用于基于特定的請求路徑來分支,而MapWhen用于基于特定斷言的結果來分支。

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

  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方法接受兩個參數:

  • Func
  • 委托操作

你可以在Startup類的Configure方法中使用下列代碼片段,不允許內容類型“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方法可用于有條件地執行中間件。下列代碼片段表明了如果請求路徑以“/api”開頭,UseWhen方法如何用于執行中間件組件。 

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

請注意:與MapWhen不同,UseWhen方法繼續執行后一個中間件,不管UseWhen斷言是真還是假。不妨通過示例了解這一點??紤]下面這部分代碼: 

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

如果中間件沒有短路,中間件A和C將始終執行。只有請求路徑以“/api”開關,中間件B才會執行。

在ASP.Net Core中,請求處理管道中有一連串中間件組件。所有請求和響應都流經該管道。新請求進入后,這些中間件組件或處理請求,或將請求傳遞到管道中的下一個組件。想完成更復雜的請求處理,我們可以使用Map和MapWhen方法使管道分支,使用UseWhen有條件地執行中間件。

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2021-01-26 14:57:00

中間件應用模塊化

2024-07-12 08:19:53

2023-10-18 07:32:27

中間件技術HTTP請求

2025-03-26 07:53:24

2024-06-12 13:02:47

2021-03-17 09:45:31

LazyCacheWindows

2021-02-02 16:19:08

Serilog日志框架

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-03-10 09:40:43

LamarASP容器

2021-02-03 13:35:25

ASPweb程序

2021-02-28 20:56:37

NCache緩存框架

2021-03-03 22:37:16

MediatR中介者模式

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-31 22:56:50

FromServiceASP

2021-01-07 07:39:07

工具接口 Swagger

2021-02-19 06:54:33

配置系統ASP.NET Cor

2024-05-13 09:32:06

攔截器HTTP中間件

2020-08-19 08:39:05

中間件前端設計模式

2021-02-07 17:29:04

監視文件接口

2021-03-04 11:10:29

容器化Docker虛擬機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜影院操 | 日本淫视频 | 欧美九九九 | 一级欧美视频 | 欧美日韩国产精品一区 | 日韩中文av在线 | 91精品一区二区三区久久久久久 | 国产精品二区三区在线观看 | 黄色网址免费在线观看 | 我想看国产一级毛片 | 伊人网在线综合 | 欧美成人精品一区二区男人看 | 亚洲欧美激情四射 | 日韩欧美一区二区三区 | av一区二区三区四区 | 国产成人综合在线 | 美日韩精品 | 欧美女优在线观看 | 极品一区| 成人h免费观看视频 | 欧美激情亚洲天堂 | 做a视频在线观看 | 久草福利 | 久久久久久国产精品免费免费狐狸 | 国产欧美性成人精品午夜 | 日本粉嫩一区二区三区视频 | 成人精品网 | 亚洲不卡在线观看 | a级大片免费观看 | 国产亚洲成av人片在线观看桃 | 精品久久精品 | 欧美精品一区二区在线观看 | 91福利网| www国产精 | 免费黄色片视频 | 成人在线一区二区 | 99这里只有精品视频 | 成人av鲁丝片一区二区小说 | 一级毛片高清 | 国产麻豆一区二区三区 | 99久久免费观看 |