• asp.net core中间件工作原理


      不少刚学习.net core朋友对中间件的概念一直分不清楚,到底StartUp下的Configure方法是在做什么?

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
      if (env.IsDevelopment())
       {
       app.UseDeveloperExceptionPage();
       }
    
      app.UseMvc();  
    }

      大家都说每个request进来都会对Configure方法中的中间件执行一遍,但通过调试发现,只有程序在启动时才会执行这段代码,过后的每次请求并不会进入

      下面给大家简单解释一下:

      假设有3个方法A B C,都有自己的业务逻辑,且参数类型与返回值类型相同

      public Task MethodA(HttpContext context);
      public Task MethodB(HttpContext context);
      public Task MethodC(HttpContext context);

      这个时候假设我通过某种手段将C方法放进B方法变成方法BC,类似:

      

    public Task MethodBC(HttpContext context)
    
    {
    
      //方法B原先逻辑
    
      return MethodC(context);
    
    }

      同理将方法BC放进方法A变成方法ABC:

      

    public Task MethodABC(HttpContext context)
    
    {
    
      //方法A原先逻辑
    
      return MethodBC(context);
    
    }
    展开后:
    public Task MethodABC(HttpContext context)
    
    {
    
      //方法A原先逻辑
    
      //方法B原先逻辑
        
        return MethodC(context);
    }

      将原本互不干执的3个方法揉进一个方法中,当服务器接收到请求时,封装好上下文丢进这个聚合方法

      换个思路,感觉观察者模式会不会更简单些,IServer中写个事件,有需要往里面注册就好了

      那怎么才可以将方法当个参数一样使用呢,自然是委托,下面官方的声明:

      中间件中最基础的组件,以HttpContext为参数,Task作为返回值

      delegate Task RequestDelegate(HttpContext context); 

      

      中间件的基本实现原理:

      public RequestDelegate Use(RequestDelegate @delegate)
    
    {
    
      return (context)=>
    
      {
    
        //一些逻辑
        return @delegate.Invoke(context);
      };
    
    }

    细细一想,是不是就是在@delegate前面加了一些逻辑后重新生成一个RequestDelegate返回

    g

  • 相关阅读:
    jsp上传下载+SmartUpload插件上传
    《鸟哥的Linux私房菜-基础学习篇(第三版)》(五)
    Activity的启动模式
    重学C++ (十一) OOP面向对象编程(2)
    寒城攻略:Listo 教你用 Swift 写IOS UI 项目计算器
    freemarker写select组件报错总结(二)
    用Radeon RAMDisk在Windows 10中创建关机或重新启动不消失的内存虚拟盘
    JS推断是否为JSON对象及是否存在某字段
    json、js数组真心不是想得那么简单
    javascript正則表達式
  • 原文地址:https://www.cnblogs.com/tey023/p/12026607.html
Copyright © 2020-2023  润新知