ibcadmin 发表于 2019-12-12 09:53:04

asp.net core中间件工作原理

<p>  不少刚学习.net core朋侪对中间件的概念不停分不清晰,到底StartUp下的Configure方法是在做什么?</p>

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

  app.UseMvc();  
}

<p> </p>
<p>  各人都说每个request进来都会对Configure方法中的中间件实验一遍,但通过调试发现,只有步伐在启动时才会实验这段代码,事后的每次哀求并不会进入</p>
<p>  下面给各人简单表明一下:</p>
<p>  假设有3个方法A B C,都有本身的业务逻辑,且参数范例与返回值范例雷同</p>

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

<p>  这个时间假设我通过某种本领将C方法放进B方法变成方法BC,类似:</p>
<p>  </p>

public Task MethodBC(HttpContext context)

{

  //方法B原先逻辑

  return MethodC(context);

}

<p>  同理将方法BC放进方法A变成方法ABC:</p>
<p>  </p>

public Task MethodABC(HttpContext context)

{

  //方法A原先逻辑

  return MethodBC(context);

}
睁开后:
public Task MethodABC(HttpContext context)

{

  //方法A原先逻辑

  //方法B原先逻辑
   
    return MethodC(context);
}

<p> </p>
<p>  将本来互不干执的3个方法揉进一个方法中,当服务器吸收到哀求时,封装好上下文丢进这个聚合方法</p>
<p>  换个思绪,感觉观察者模式会不会更简单些,IServer中写个事故,有必要往内里注册就好了</p>
<p> </p>
<p>  那怎么才可以将方法当个参数一样使用呢,自然是委托,下面官方的声明:</p>
<p>  中间件中最基础的组件,以HttpContext为参数,Task作为返回值</p>
<p>delegate Task RequestDelegate(HttpContext context); </p>
<p>  </p>
<p>  中间件的根本实现原理:</p>

  public RequestDelegate Use(RequestDelegate @delegate)

{

  return (context)=>

  {

    //一些逻辑
    return @delegate.Invoke(context);
  };

}

<p>细细一想,是不是就是在@delegate前面加了一些逻辑后重新天生一个RequestDelegate返回</p>
<p>g</p>
页: [1]
查看完整版本: asp.net core中间件工作原理