中间件

管道和中间件

  • 管道:net框架用来封装请求的应用

  • 中间件:

    • (aop方式)一种装配到管道应用用来处理请求和响应的组件
    • 中间件可以对管道里面的任何一个请求进行拦截,决定是否将请求转移到下一个中间件
    • 中间件就是一个处理http请求和响应的组件,多个中间件构成了请求处理管道,每个中间件都可以选择处理结束,还是继续传递给管道中的下一个中间件,以此串联形成请求管道。通常,我们注册的每个中间件,每次请求和响应均会被调用,但也可以使用 Map , MapWhen ,UseWhen 等扩展方法对中间件进行过滤。
  • 中间件注册到管道的三种方式

    1. //1. 通过Use的方式注册中间件,可以控制是否将请求传递到下一个中间件;
      app.Use(async (context, next) =>
      {
          await context.Response.WriteAsync("hello1");
          // 管道短路
          //await next.Invoke();
      });
      
    2.    //2. 通过Run的方式注册中间件,一般用于断路或请求管道末尾,即不会将请求传递下去(让请求管道短路)
         app.Run(async (context) =>
         {
             		await context.Response.WriteAsync("hello2");
         });
      
    3.  //3. 创建管道分支
       //请求管道中增加分支,条件满足之后就由分支管道进行处理,而不会切换回主管道;Map用于请求路径匹配,而MapWhen可以有更多的条件进行过滤;
       app.Map("/map1", UseMiddleware1);
       app.Map("/map2", UseMiddleware2);
      
       app.Run(async (context) =>
       {
         await context.Response.WriteAsync("hello END");
       });
         
      app.UseMiddleware<>()
      
    4. .net fram管道和.netcore管道的区别

      • .net管道方式(全家桶式,不支持热拔插)

        1. 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进行进一步处理。
        2. HttpRuntime通过请求信息创建HttpContext上下文对象,此对象将贯穿整个管道,直到响应结束。同时创建或从应用程序池里初始化一个HttpApplication对象,由此对象开始处理之前注册的多个HttpModule
        3. 调用HandlerFactory创建Handler处理程序,最终处理此次请求内容,生成响应返回。
        • 在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule
          img
      • .net core(是由许多个中间件组成)

        • 中间件就像一层一层的“滤网”,过滤所有的请求和相应。这一设计非常适用于“请求-响应”这样的场景——消息从管道头流入最后反向流出。
        • ASP.NET Core MVC 和 Razor Pages 应用的完整请求处理管道,中间件顺序
          img
        • mvc终端路由中间件顺序
          img
  • 链接:

posted @ 2023-03-30 15:21  乐天--  阅读(52)  评论(0)    收藏  举报