中间件 VS 过滤器 VS 拦截器

Ayok Lv2

中间件 VS 过滤器 VS 拦截器

在ASP.NET Core中,中间件(Middleware)和过滤器(Filters)是两种不同的机制,用于处理请求和响应的管道。它们的作用和适于场景有所不同

中间件

定义

中间件是请求处理管道中的组件,用于处理HTTP请求和响应。每个中间件可以对请求进行处理,并决定释放将请求传递给下一个中间件。

特点

  1. 全局性:中间件作用于整个应用程序的请求管道,适用于所有请求
  2. 顺序性:中间件的执行顺序由UseMidderware或Use方法的调用顺序决定
  3. 灵活性:可以处理请求和响应,甚至可以终止请求管道(不调用下一个中间件)
  4. 低级别:中间件更接近底层,可以直接操作HTTPContext

过滤器

定义

过滤器是ASP.NET MVC或Minimal API中的一种机制,用于在特定的MVC操作(Action)或控制器(Controller)前后执行逻辑。过滤器MVC框架的一部分,而不是请求管道的一部分

特点

  1. 局部性:过滤器可以应用于特定的控制器或操作,而不是全局的
  2. 细粒度控制:AOP切面执行,可以在操作执行前,执行后或者执行过程中插入逻辑
  3. MVC集成:过滤器与MVC框架紧密集成,可以访问MVC特定的上下文(如ActionExecutingContext)
  4. 高级别:过滤器更关注MVC操作的行为,而不是底层的Http请求

适用场景

  1. 控制器或操作级别的逻辑(如授权,模型验证,日志记录)
  2. 修改操作的结果(如格式化响应,处理异常)
  3. 在操作执行前后执行特定逻辑

过滤器类型

Authorization Filters:用于授权(如[Authorize])
Resource Filters:在操作执行前后执行逻辑(如缓存)
Action Filters:在操作执行前后执行逻辑(如日志记录)
Exception Filters:处理操作中的异常
Result Filters:在操作结果执行前后执行逻辑(如格式化响应)

拦截器

拦截器(Interceptor)是面向切面变成(Aop)的一直实现方式。它的作用的是在不修改目标代码的前提下,在方法调用的前后插入额外逻辑(如日志,权限,事务等),等同于给方法套壳
ABP的拦截器是基于Castle DybamicProxy实现的AOP机制,它通过动态生成代理类,在方法调用前后插入横切逻辑
ABP内置了权限,审计,验证,事务,缓存五大核心拦截器。这下‘魔法’之所以能在HTTP调用,后台作业,单元测试中一致生效,正是因为它们不依赖HTTP上下文,作用于方法调用本身
例如,[AbpAuthorize]的权限校验由AuthorizationInterceptor完成,即使我在后台作业中调用AppService,权限依旧会被检查

自定义拦截器

性能监控拦截器,自动记录超过 500ms 的方法调用,帮助团队发现慢查询问题。这种设计既解耦了业务代码,又保证了监控的全面性。
https://www.nuget.org/packages/Ayok.OperationTrackingLibrary/1.0.0

核心需求

  1. 自动记录所有关键业务方法的调用信息
  2. 无需修改业务代码
  3. 支持异步方法
  4. 可配置开关
  5. 结构化日志
  6. 低性能开销
  • 标题: 中间件 VS 过滤器 VS 拦截器
  • 作者: Ayok
  • 创建于 : 2025-10-18 01:14:56
  • 更新于 : 2025-10-18 01:22:10
  • 链接: https://ayok-lie.github.io/2025/10/18/Middleware-Filter-Interceptor/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论