当前位置: 移动技术网 > IT编程>开发语言>.net > asp.net core中间件工作原理

asp.net core中间件工作原理

2019年12月12日  | 移动技术网IT编程  | 我要评论

jiqingwenxuewang,白蕉海鲈,亚太日报

  不少刚学习.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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网