中间件 VS 过滤器 VS 拦截器
中间件 VS 过滤器 VS 拦截器
在ASP.NET Core中,中间件(Middleware)和过滤器(Filters)是两种不同的机制,用于处理请求和响应的管道。它们的作用和适于场景有所不同
中间件
定义
中间件是请求处理管道中的组件,用于处理HTTP请求和响应。每个中间件可以对请求进行处理,并决定释放将请求传递给下一个中间件。
特点
- 全局性:中间件作用于整个应用程序的请求管道,适用于所有请求
- 顺序性:中间件的执行顺序由UseMidderware或Use方法的调用顺序决定
- 灵活性:可以处理请求和响应,甚至可以终止请求管道(不调用下一个中间件)
- 低级别:中间件更接近底层,可以直接操作HTTPContext
过滤器
定义
过滤器是ASP.NET MVC或Minimal API中的一种机制,用于在特定的MVC操作(Action)或控制器(Controller)前后执行逻辑。过滤器MVC框架的一部分,而不是请求管道的一部分
特点
- 局部性:过滤器可以应用于特定的控制器或操作,而不是全局的
- 细粒度控制:AOP切面执行,可以在操作执行前,执行后或者执行过程中插入逻辑
- MVC集成:过滤器与MVC框架紧密集成,可以访问MVC特定的上下文(如ActionExecutingContext)
- 高级别:过滤器更关注MVC操作的行为,而不是底层的Http请求
适用场景
- 控制器或操作级别的逻辑(如授权,模型验证,日志记录)
- 修改操作的结果(如格式化响应,处理异常)
- 在操作执行前后执行特定逻辑
过滤器类型
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
核心需求
- 自动记录所有关键业务方法的调用信息
- 无需修改业务代码
- 支持异步方法
- 可配置开关
- 结构化日志
- 低性能开销
- 标题: 中间件 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 进行许可。