1. 中间件的概述

中间件是一种装配到应用管道以处理请求和响应的组件。 每个组件:

选择是否将请求传递到管道中的下一个组件。
可在管道中的下一个组件前后执行工作。

请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。

中间件是构成请求管道的基石

2. 与Framework中IHttpModule的比较

IHttpModule和IHttpHandler在管道里的执行示意

中间件在管道里的执行示意

  • 自定义IHttpModule

  • IHttpHandler和IHttpModule迁移到中间件

中间件更简单

1.模块、处理程序、 Global.asax.cs、 Web.config (IIS 配置除外)和应用程序生命周期已消失

2.中间件已使用模块和处理程序的角色

3.中间件使用代码而不是Web.config来配置

中间件更灵活

通过管道时,你可以将请求发送到特定的中间件,不仅可以基于 URL,还可以发送到请求标头、查询字符串等。

中间件非常类似于IHttpModule
  • 按指定的规则,为每个请求按分配

  • 阻止将请求传递给下一个中间件,来对请求进行短路(短路指:停止将请求传递给下一个中间件,对客户端响应)

  • 能够创建自己的 HTTP 响应

中间件和IHttpModule按不同的顺序进行处理
  • 生命周期事件

  • 中间件响应的顺序与请求的顺序相反。IHttpModule中,对于请求和响应,顺序是相同的。

3. 基于约定实现一个中间件

中间件生命周期默认为单例
}

4. 基于接口实现一个中间件

生命周期可自定义
}

5. 将中间件加入请求管道

通过IApplicationBuilder 接口加入管道,提供了多个方法:

Use、Run、Map、MapWhen、UseMiddleware

底层都是用到了Use。

一般使用UseMiddleware,因为其提供了DI(依赖注入)的功能。

6. 中间件传递请求

本质是通过RequestDelegate,传递HttpContenxt。

下面的动态图,方便更好的理解

7. 中间件和过滤器的比较

红色的线表示中间件的请求,蓝色的表示Filter的请求。

无关MVC/API上下文,则使用中间件,达到缩短管道流程的目的。

参考源码:StaticFileExtensions.UseStaticFiles

8. 终端中间件

请求管道中的每个中间件组件负责调用管道中的下一个组件,或使管道短路。 当中间件短路时,它被称为“终端中间件”,因为它阻止中间件进一步处理请求。

参考:

自定义IHttpHandler

自定义IHttpModule

Webservice中使用自定义IHttpModule实现AOP

ore 中间件

Middleware vs. Filters

中间件官方文档

基于工厂的中间件



​netcore 中间件浅析中间件浅析.md


相关文章:

  • 2021-07-10
  • 2021-06-14
  • 2021-08-14
  • 2021-07-07
  • 2021-07-14
猜你喜欢
  • 2021-12-25
  • 2022-12-23
  • 2021-10-22
  • 2022-12-23
  • 2021-08-30
  • 2022-12-23
  • 2021-07-25
相关资源
相似解决方案