zoukankan      html  css  js  c++  java
  • .NetCore 简单的使用中间件

    //定义中间件

    我们定定义中间件通常有 app.Use(), app.Run(), app.Map() , appMapWhen()四个方法

    1:app.Use()

    IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware);

    其中 RequestDelegate 仍然是一个委托,需要满足如下的签名

    public delegate Task RequestDelegate(HttpContext context);

     

    app.Use(next =>
    {
           return new RequestDelegate(async c =>
          {
        await c.Response.WriteAsync("start-88888888888");
        await next.Invoke(c);
        await c.Response.WriteAsync("end-88888888888");
          });
    });

     

    2:app.Run() 默认会终止后面的所有管道事件或者中间件等函数,如果app.Use()去掉了 await next.Invoke()就和 app.Run()是等价的效果

    3:app.Map()  这个方法为我们提供了一些方便的分支处理 ,它是在管道中增加了分支。通过映射路径来判断处理管道分支

      public static IApplicationBuilder Map(this IApplicationBuilder app, PathString pathMatch, Action<IApplicationBuilder> configuration);

    pathMatch 我们从字面意思上就可以理解到,请求的链接路径匹配的话,就执行 configuration 里面的中间件或者函数

     

       app.Map("/mapTest", DoMyHandler);   //doHandler 为自定义的相关匹配签名函数即可
        app.Run(async context =>
               {
                          await context.Response.WriteAsync("  hello world! ");
               });

      private void DoMyHandler(IApplicationBuilder build)
      {
         build.Use(next => new RequestDelegate(async c =>
         {
        await c.Response.WriteAsync("你好");
         }));
      }

    //--或者如下

       private static void doMyHandler(IApplicationBuilder app)
           {
               app.Run(async context =>
               {                await context.Response.WriteAsync("你好我好大家好!");
               });
           }

    4:app.MapWhen() 从字面上可以理解为 符合判断才会进入对应的中间件

       app.MapWhen(context =>
       { 
            return context.Request.Query.ContainsKey("qq"); 
       }, DoMyHandler);  

    中间件我们通常是把上面的方法给提出来并放在一个class类里面,并进一步使用扩展方法, IApplicationBuilder相当于一个容器集合!

     5:一些简单的测试截图如下:

    6:新增扩展方法就显得更加的规范了:

     

  • 相关阅读:
    AIBigKaldi(二)| Kaldi的I/O机制(源码解析)
    OfficialKaldi(十四)| 从命令行角度来看Kaldi的 I / O
    GNU Make函数、变量、指令
    C/C++编码规范(google)
    [English]precede, be preceded by
    视频压缩技术、I帧、P帧、B帧
    SMB
    printf占位符
    使用 Yocto Project 构建自定义嵌入式 Linux 发行版
    gcc fpic fPIC
  • 原文地址:https://www.cnblogs.com/Fengge518/p/12242435.html
Copyright © 2011-2022 走看看