• 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

  • 相关阅读:
    Pytorch学习(一)基础语法篇
    CSAPP深入理解计算机系统(第二版)第三章家庭作业答案
    理解DP(持续更新)
    LeetCode题解 | 215. 数组中的第K个最大元素
    快速排序
    浅谈设计模式(java)——从lol来看观察者模式
    <小虾米的android学习之旅1>Android框架
    程序员如何用技术变现?
    为了反击爬虫,前端工程师的脑洞可以有多大?
    如何成为一名爬虫工程师?(顺带提供工作机会)
  • 原文地址:https://www.cnblogs.com/tey023/p/12026607.html
Copyright © 2020-2023  润新知