首页 > 编程语言 >aspnetcore 中间件执行顺序

aspnetcore 中间件执行顺序

时间:2023-07-10 18:33:27浏览次数:37  
标签:顺序 Console Invoke aspnetcore 中间件 next static WriteLine Action

这是用例和返回结果
输出的结果是对称的

当我第一眼看着这个操作时满脑子不解:

  • 一个方法是怎么扳成2截来使用的
  • 要是我来做肯定让用户传2个委托

完整实现代码

class Program
{
  static List<Action<Action>> middlewareList = new List<Action<Action>>();

  static void Use(Action<Action> middleware)
  {
      middlewareList.Add(middleware);
  }

  static void Run(Action<Action> middleware)
  {
      middlewareList.Add(middleware);

      Action<Action> next = null;
      for (int i = middlewareList.Count - 1; i >= 0; i--)
      {
          var currentMiddleware = middlewareList[i];
          next = CreateNext(currentMiddleware, next);
      }
      next.Invoke(() => { });
  }

  static Action<Action> CreateNext(Action<Action> currentMiddleware, Action<Action> next)
  {
      return (Action continuation) =>
      {
          currentMiddleware.Invoke(() =>
          {
              next?.Invoke(continuation);
          });
      };
  }

  static void Main(string[] args)
  {
      Use((next) =>
      {
          Console.WriteLine("-1 BEGIN");
          next.Invoke();
          Console.WriteLine("-1 END");
      });

      Use((next) =>
      {
          Console.WriteLine("--2 BEGIN");
          next.Invoke();
          Console.WriteLine("--2 END");
      });

      Use((next) =>
      {
          Console.WriteLine("---3 BEGIN");
          next.Invoke();
          Console.WriteLine("---3 END");
      });

      Run(ctx =>
      {
          Console.WriteLine("----RUN");
      });

      Console.ReadLine();
  }
}

标签:顺序,Console,Invoke,aspnetcore,中间件,next,static,WriteLine,Action
From: https://www.cnblogs.com/trykle/p/17541974.html

相关文章

  • web中间件漏洞之(3)fastjson反序列化漏洞
    引言fastjson可以将Java对象序列化为json格式,也可将json反序列化为Java对象。在请求包里面中发送恶意的json格式payload,fastjson在处理json对象时使用了autotype机制,允许在反序列化时通过@type指定反序列化的类,调用指定类的set和get方法。攻击者可以通过rmi或ldap服务,将ldap......
  • Kafka如何保证消息的消费顺序
    Kafka中Partition(分区)是真正保存消息的地方,发送的消息都被放在这里。每次添加消息到Partition(分区)的时候都会采用尾加法,如上图所示。Kafka只能保证Partition(分区)中的消息有序,而不能保证Topic(主题)中的Partition(分区)的有序。消息在被追加到Partition(分区)的时候都会分配一个特......
  • Vue 先初始化子组件再初始化父组件的方法(自定义父子组件mounted执行顺序)
    写在前面:本篇内容内容主要讲述了,在使用Konva进行开发过程中遇到的一些问题。(既然是组件加载顺序,主要牵扯到的就是,父子组件的关系,父子组件的生命周期)众所周知,Vue中父子组件生命周期的执行顺序为://挂载阶段父beforeCreate->父created->父beforeMount->子beforeCre......
  • 58.类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一些?
    58.类成员初始化方式?构造函数的执行顺序?为什么用成员初始化列表会快一些?1.类成员初始化方式1.1初始化方式一:默认时初始化如果类成员没有被显式初始化,将会使用默认初始化。默认初始化指没有提供初始化式的情况下,将使用默认值进行初始化。对于基本数据类型(如整数、浮点数等),默认......
  • Oracle修改表列名与顺序的解决方案 (sql 修改列名)
    Oracle10g修改表列名与顺序的解决方案-下面介绍通过修改数值字典的方法修改表的列名:假设在SCOTT帐号下有HB_TEST表:----------------------------------------------------------------------目的:调换STU_ID和STU_NAME的顺序;并把STU_ID改为S_ID;SQL>SELECT*FRO......
  • JWT令牌是中间件吗?(不是)
    JSONWebToken(JWT)是一种用于在网络应用中传递声明(Claims)的开放标准。它通过对声明进行数字签名,以确保声明的完整性和可信任性,从而实现安全而可靠的身份验证和授权机制。JWT本身不属于中间件,而是一种用于身份验证和授权的令牌机制。然而,JWT可以在中间件中使用,以实现身份验证和......
  • 什么是中间件?
    中间件(middleware)是指在软件系统中,处于两个或多个组件之间的一个层,用于处理请求和响应。它常用于处理系统级别的功能,如请求认证、日志记录、错误处理等。中间件允许开发人员将这些功能从应用程序的核心逻辑中解耦出来,使得系统更易于维护和扩展。在Web开发中,中间件可以被插入到请......
  • 【白话文严蔚敏数据结构】顺序文件
    顺序文件就是逻辑顺序与物理顺序一致的文件叫做顺序文件,如果逻辑相邻物理相邻叫做连续文件,如果逻辑相邻物理不相邻叫做串联文件。顺序文件是根据记录的位置(绝对位置和相对位置都可以)进行存取的文件组织方式。顺序文件的优点是连续存取速度快,因此主要用于只进行顺序存取和批量修改......
  • 【.NET源码解读】深入剖析中间件的设计与实现
    .NET本身就是一个基于中间件(middleware)的框架,它通过一系列的中间件组件来处理HTTP请求和响应。在之前的文章《.NET源码解读kestrel服务器及创建HttpContext对象流程》中,已经通过源码介绍了如何将HTTP数据包转换为.NET的HttpContext对象。接下来,让我们深入了解一下.NET是如何设计中......
  • 拦截器的配置以及执行顺序
    在SpringBoot中,拦截器的执行顺序可以通过InterceptorRegistry对象的addInterceptor()方法按照添加的顺序进行配置。默认情况下,拦截器的执行顺序是按照它们添加到拦截器注册表中的顺序执行的。也就是说,先添加的拦截器会先执行,后添加的拦截器会后执行importorg.springframework......