最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解在ASP.NET Core中如何編寫合格的中間件

 更新時(shí)間:2019年11月06日 15:04:55   作者:ZaraNet  
這篇文章主要介紹了詳解在ASP.NET Core中如何編寫合格的中間件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

這篇文章探討了讓不同的請(qǐng)求去使用不同的中間件,那么我們應(yīng)該如何配置ASP.NET Core中間件?其實(shí)中間件只是在ASP.NET Core中處理Web請(qǐng)求的管道。所有ASP.NET Core應(yīng)用程序至少需要一個(gè)中間件來響應(yīng)請(qǐng)求,并且您的應(yīng)用程序?qū)嶋H上只是中間件的集合。當(dāng)然MVC管道本身就是中間件,早在WebForm時(shí)代就出現(xiàn)過HttpModules、HttpHandler、那個(gè)時(shí)候悠然記得我通過它們來組織我的廣告系統(tǒng),不閑扯我們繼續(xù)。

每個(gè)中間件組件都有一個(gè)帶有HttpContext參數(shù)的Invoke方法。您可以使用這個(gè)參數(shù)來處理方法。

public async Task Invoke(HttpContext context)
{
 if (context.Request.Path...)
 {
  await context.Response.WriteAsync("writing text...");
 }
}

應(yīng)用程序中最頂層的中間件將始終針對(duì)每個(gè)請(qǐng)求被調(diào)用。這是由.NET框架自動(dòng)完成的。中間件可以向客戶端發(fā)送響應(yīng),也可以調(diào)用下一個(gè)中間件。對(duì)于后一種選擇,它當(dāng)然需要訪問下一個(gè)中間件組件。這就是為什么大多數(shù)中間件組件都是使用帶有RequestDelegate參數(shù)的構(gòu)造函數(shù)定義的。總之,RequestDelegate會(huì)自動(dòng)填充,您無需在意。

中間件在Startup.cs的Configure方法中注冊(cè)。Configure方法具有IApplicationBuilder參數(shù),該參數(shù)提供了所有類型的中間件注冊(cè)所需的方法,我們?cè)囍ゾ帉懸粋€(gè)中間件。

public class MyCustomMiddleware
 {
  private readonly RequestDelegate _next;
  public MyCustomMiddleware(RequestDelegate next)
  {
   _next = next;
  }
  public async Task Invoke(HttpContext context, IWebHostEnvironment env)
  {
   context.Response.Headers["app-name"] = env.ApplicationName+"Zaranet";
   context.Response.Headers["env-name"] = env.EnvironmentName+ "Zaranet";
   await _next(context);
  }
 }

隨后我們?cè)赟tartup.cs的Configure方法中通過 use 來注冊(cè)自定義中間件。

public void Configure(IApplicationBuilder app, ...)
{
 app.UseMyCustomMiddleware();
}

啟動(dòng)程序我們發(fā)現(xiàn)一些正常,我們得到了我們想要的效果。

 

但實(shí)際上,您很少需要直接調(diào)用UseMiddleware,因?yàn)橹虚g件作者的標(biāo)準(zhǔn)方法是編寫特定于所注冊(cè)中間件的擴(kuò)展方法:

using MiddlerWareSolucation.MiddlerWare;
using Microsoft.AspNetCore.Builder;

namespace MiddlerWareSolucation.MiddlerWare_Extensions
{
 public static class MyCustomMiddlewareExtensions
 {
  public static IApplicationBuilder UseMyCustomMiddleware(this IApplicationBuilder app)
  {
   app.UseMiddleware<MyCustomMiddleware>();

   return app;
  }
 }
}

隨后直接調(diào)用Extensions擴(kuò)展方法,效果還是一樣的。

public void Configure(IApplicationBuilder app, ...)
{
 app.UseMyCustomMiddleware();
}

部分時(shí)候我們想要通過客戶端請(qǐng)求的路徑來對(duì)我們的中間件進(jìn)行啟動(dòng),當(dāng)然 MapWhen 允許您通過指定謂詞將中間件管道分成兩個(gè)完全獨(dú)立的分支:

app.UseMiddlewareOne();

app.MapWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
  appBuilder.UseMiddlewareTwo();
});

app.UseMiddlewareThree();

在此示例中,中間件One將始終執(zhí)行,如果請(qǐng)求路徑以“ / api”開頭,則將執(zhí)行中間件Two。否則,將執(zhí)行中間件Three。使用這種配置,中間件2和中間件3都無法針對(duì)單個(gè)請(qǐng)求執(zhí)行。

我想說的是最后一種情況是,您希望大多數(shù)中間件針對(duì)所有請(qǐng)求運(yùn)行,但是您有一些條件件-特定中間件僅應(yīng)針對(duì)某些請(qǐng)求運(yùn)行。

這可以通過UseWhen輕松實(shí)現(xiàn),UseWhen還使用謂詞來確定中間件是否應(yīng)該運(yùn)行:

app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
 appBuilder.UseStatusCodePagesWithReExecute("/apierror/{0}");

 appBuilder.UseExceptionHandler("/apierror/500");
});

這樣就可以通過選擇注冊(cè)方式來自己控制中間件。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

临潭县| 江北区| 尉氏县| 兰溪市| 游戏| 谢通门县| 天水市| 高邑县| 罗源县| 武安市| 瑞金市| 广灵县| 高阳县| 宝鸡市| 景洪市| 海安县| 德清县| 滨海县| 海盐县| 朔州市| 容城县| 昌吉市| 万全县| 阿克陶县| 章丘市| 南川市| 德格县| 靖边县| 惠水县| 朝阳区| 徐闻县| 海南省| 平阴县| 盘锦市| 东莞市| 大田县| 拉萨市| 建瓯市| 南投市| 灯塔市| 固始县|