<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ASP.NET Core實現自定義中間件的三種方式

      一、什么是中間件

          請求處理管道由一系列中間件組件組成。每個組件在 HttpContext 上執行操作,調用管道中的下一個中間件或終止請求。

      詳情請看另外一篇文章:白話管道中間件

      下圖是中間件的管道模型圖,有點類似過濾器。

       

       

      二、中間件可以用來做什么?

          在我們的應用程序當中和業務關系不大的一些需要在管道中做的事情可以使用,比如身份驗證,Session存儲,日志記錄,定時任務等。.NET自帶很多中間件,比如身份認證中間件UseAuthorization,Session中間件等。并且中間件可以自定義。

       

      三、自定義中間件

          當系統自帶的中間件不能滿足我們需求時,我們可以自定義中間件來實現功能,比如自己開發的定時任務等。注冊中間件的方式可以使用use和run,use可以快速注冊中間件,而run是終端中間件,是中間件管道末尾,當注冊該中間件后,后面的中間件將不再執行。下面介紹三種自定義中間件的方式。

      1、自定義匿名中間件

      自定義匿名中間件在Program.cs文件中就可以實現,可以通過use和run來自定義匿名中間件。案例如下:

      app.Use(async (context, next) =>{    Console.WriteLine("測試匿名中間件");    await next();});//如果shi用app.run將在這里結束。

      還可以通過useWhen創建子集中間件。如下代碼

      //UseWhen有點類似if,這里是如果訪問/put或者/put/xxx會調用該中間件。app.UseWhen(context => context.Request.Path.StartsWithSegments("/put"), app =>{    app.Use(async (context, next) =>    {        Console.WriteLine("測試UseWhen匿名中間件");        await next();    });});

      使用注意:如果有下一個中間件,一定記得調用next(),否則會導致管道短路,后面的中間件不再被執行;如果有response操作不能調用next(),否則會報錯。

       

      2、基于工廠的中間件

      基于工廠中間件需要通過IMiddleware接口實現,然后在通過UseMiddleware注冊后在Program.cs文件中依賴注入。代碼如下:

       //通過實現IMiddleware接口  public class Middleware:IMiddleware    {        public async Task InvokeAsync(HttpContext context, RequestDelegate next)        {            //下一個之前執行            Console.WriteLine("測試基于工廠的中間件(歡迎公眾號:DOTNET開發跳槽)");            await next(context);            //下一個中間件處理完之后執行            Console.WriteLine("基于工廠的中間件運行結束");        }    }        public static class MiddlewareExtensions    {        public static IApplicationBuilder Middleware(this IApplicationBuilder builder)        {          //需要注冊一下才能使用            return builder.UseMiddleware<Middleware>();        }    }    //在Program.cs中注冊和注入    builder.Services.AddSingleton<Middleware>();    app.Middleware();

      3、基于約定中間件

      主要通過RequestDelegate來實現管道傳遞,關鍵代碼如下。

       public class TestMiddleware    {        public RequestDelegate _requestDelegate;        public TestMiddleware(RequestDelegate requestDelegate)        {            _requestDelegate = requestDelegate;        }        public async Task InvokeAsync(HttpContext context)        {            //下一個之前執行            Console.WriteLine("測試約定中間件開始,(歡迎公眾號:DOTNET開發跳槽)");            await _requestDelegate(context);        }    }   //在Program.cs中注冊   app.UseMiddleware<TestMiddleware>();

      執行效果如下:

       

       

       

      結語

          本文講述了自定義中間件的三種實現方式,自定義匿名中間件、基于工廠中間件和約定中間件。如果是比較小的功能,可以使用匿名中間件,比如過濾請求的鏈接;基于工廠中間件和約定中間件建議比較大的功能使用,從便利上來說推薦約定中間件。這是小編在使用中間件的個人總結,僅供參考。希望本文對你有所收獲,對于自定義中間件你有啥看法,歡迎留言討論或吐槽。

      posted @ 2022-12-28 20:27  春光牛牛  閱讀(311)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产成人午夜福利在线播放| 日日碰狠狠添天天爽五月婷| 人妻无码久久久久久久久久久| 99久久亚洲综合网精品| 成人无码精品免费视频在线观看| 国产尤物精品自在拍视频首页| 亚洲一区二区日韩综合久久| 亚洲成av人无码免费观看| 亚洲人妻系列中文字幕| 亚洲精品色国语对白在线| 午夜免费福利小电影| 国产AV福利第一精品| 国产精品一区二区三区卡| 欧美成人精品在线| 九九热免费在线观看视频| 亚洲V天堂V手机在线| 国产sm调教折磨视频| 亚洲欧洲av一区二区| 亚洲欧美国产日韩天堂区| 果冻传媒18禁免费视频 | 国产精品偷伦费观看一次| 日韩欧美在线综合网另类| 久久99国产一区二区三区| 女人高潮被爽到呻吟在线观看 | 亚洲乱码一二三四区| 无遮无挡爽爽免费视频| 在线观看特色大片免费视频| 国产亚洲999精品aa片在线爽 | 91产精品无码无套在线| 国产无人区码一区二区| 亚洲国产精品ⅴa在线观看| 亚洲啪啪精品一区二区的| 91中文字幕在线一区| 中国老熟女重囗味hdxx| 日本高清不卡一区二区三| 久女女热精品视频在线观看| 汽车| 黄色免费在线网址| 国产精品视频一品二区三| 国产中文字幕日韩精品| 久久午夜私人影院|