日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何使用ASP.NetCore中的條件中間件?

ASP.Net Core是微軟的一種開源跨平臺框架,具有可擴展、精簡化和模塊化的優(yōu)點,可用于構(gòu)建高性能Web應(yīng)用程序。中間件組件可以用在ASP.Net Core請求管道中,定制處理請求和響應(yīng)的方式。

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

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

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

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

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

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

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

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

ASP.Net Core中注冊中間件

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

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

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

ASP.Net Core中的Invoke方法

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

下列代碼片段表明了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方法接受兩個參數(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í)行中間件。下列代碼片段表明了如果請求路徑以“/api”開頭,UseWhen方法如何用于執(zhí)行中間件組件。

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

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

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

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

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

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


網(wǎng)頁題目:如何使用ASP.NetCore中的條件中間件?
當(dāng)前鏈接:http://www.dlmjj.cn/article/cddhcdd.html