zoukankan      html  css  js  c++  java
  • Asp.Net Core入门之自定义中间件

    什么是中间件?

    这里引用官方解释:

           中间件是用于组成应用程序管道来处理请求和响应的组件。管道内的每一个组件都可以选择是否将请求交给下一个组件、并在管道中调用下一个组件之前和之后执行某些操作。请求委托被用来建立请求管道,请求委托处理每一个 HTTP 请求。

           请求委托通过使用 IApplicationBuilder 类型的 Run、Map 以及 Use 扩展方法来配置,并在 Startup 类中传给 Configure 方法 。每个单独的请求委托都可以被指定为一个内嵌匿名方法,或其定义在一个可重用的类中。这些可重用的类被称作 中间件 或 中间件组件。每个位于请求管道内的中间件组件负责调用管道中下一个组件,或适时短路调用链。

           ASP.NET 请求管道由一系列的请求委托所构成,它们一个接着一个被调用,如图所示(该执行线程按黑色箭头的顺序执行):

     request-delegate-pipeline

    ASP.Net Core内置很多中间件,如:静态文件,身份验证,MVC等。

    这里需要注意的是,中间件添加的顺序非常重要,这会影响他们处理请求的顺序。如果顺序添加不对,很可能其中某个中间件会造成管道短路,不能触发下一个请求委托,造成系统异常。

    自定义中间件

    1.自定义中间件处理逻辑。

     1     public class MyMiddleWare
     2     {
     3         private readonly ILogger logger;
     4         private readonly RequestDelegate next;
     5         /// <summary>
     6         /// 通过构造函数 注入Logger日志和Http请求委托
     7         /// </summary>
     8         /// <param name="_logger"></param>
     9         /// <param name="_next"></param>
    10         public MyMiddleWare(ILogger<MyMiddleWare> _logger, RequestDelegate _next)
    11         {
    12             logger = _logger;
    13             next = _next;
    14         }
    15 
    16         /// <summary>
    17         /// 在调用下一个组件之前和之后执行某些操作
    18         /// </summary>
    19         /// <param name="context"></param>
    20         /// <returns></returns>
    21         public async Task Invoke(HttpContext context)
    22         {
    23             logger.LogInformation("自定义中间件,开始" + DateTime.Now);
    24             await next.Invoke(context);
    25             logger.LogInformation("自定义中间件,结束" + DateTime.Now);
    26         }
    27     }

    2.使用IApplicationBuilder向应用程序的请求管道添加中间件

    1     public static class ServiceExtensions
    2     {
    3         public static IApplicationBuilder UserMyMiddleWare(this IApplicationBuilder app)
    4         {
    5             return app.UseMiddleware<MyMiddleWare>();
    6         }
    7     }

    3.通过Configure方法添加自定义中间件。

    Configure 方法用于指定 ASP.NET 应用程序将如何响应每一个 HTTP 请求。中间件需要最终在这里添加。

     1         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
     2         {
     3             if (env.IsDevelopment())
     4             {
     5                 app.UseDeveloperExceptionPage();
     6             }
     7             //wwroot目录下静态文件
     8             app.UseStaticFiles();
     9             //添加自定义中间件
    10             app.UserMyMiddleWare();
    11         }

    当然大家也可以在Configure 方法中直接使用 app.UseMiddleware<MyMiddleWare>()进行添加,我这里是单独做了一个派生类,方便管理吧。

    好了,然后我们启动程序,大家会发现我们刚才添加的中间件处理请求信息:

  • 相关阅读:
    Javascript 加解密
    Netsuite 友好提示
    一中另类调试javascrīpt的好方法
    js 转化为标准日期型
    多站点整合—单点登录简单方案{装载}
    win+e 失效
    (转载)向页面某处动态添加js的方法
    prototype.js源码解读(一)
    Saved search in customer center on tab
    spring boot 加载web容器tomcat流程源码分析
  • 原文地址:https://www.cnblogs.com/chenxf1117/p/12970750.html
Copyright © 2011-2022 走看看