Day15-4:【日志】中间件和过滤器 的对比选择

一、核心区别

  1. 日志中间件(Middleware)所有请求 :静态文件、404、Swagger、控制器、路由错误...... 全都能拦到。→ 范围最大

  2. ActionFilter / IAsyncActionFilter 只管 进入控制器 Action 的请求, 404、路由失败、授权失败都拦不到。→ 范围小、粒度更细

二、详细对比(面试常问)

1. 执行时机不同

  • 中间件:最早执行,在 MVC 管道之前
  • ActionFilter:在模型绑定后、Action 执行前

2. 覆盖范围不同

  • 中间件:全量请求
  • Filter:只针对 Controller/Action

3. 能拿到的信息不同

  • 中间件:只能拿到 HttpContext,拿不到 Action 参数、方法名
  • ActionFilter:能拿到 Action 参数、控制器名、方法名、模型验证状态

4. 异常覆盖不同

  • 中间件:能捕获整个管道所有异常
  • ActionFilter:只能捕获 Action 内异常

三、现在应该怎么选?(实战建议)

方案 A:只使用 日志中间件(最简单、最稳、企业最常用)

后台管理系统 / API 项目 统一用:日志中间件 + Serilog

优点:

  • 一次编写,覆盖所有请求
  • 不会漏
  • 代码简单
  • 配合 Serilog 完美

方案 B:只使用 ActionFilter

只有这些场景才用 ActionFilter

  • 单独给某个接口做日志
  • 要打印方法参数、返回值
  • 做权限校验、限流、参数校验

优点:

  • 可以精细控制某个控制器 / Action 单独打日志
  • 能拿到参数、方法名

缺点:

  • 404 不进过滤器
  • 容易漏日志

方案 C:两个都写?

绝对不要! 会导致一条请求打印两条日志,冗余、混乱、排查问题麻烦。

五、最精简总结(背住)

  • 日志中间件 = 全局请求日志(推荐)
  • ActionFilter = 控制器级别的 AOP(不适合做全局请求日志)
  • 效果一样,但范围不一样
  • 企业项目二选一,不要都用
相关推荐
van久15 小时前
Day20:AutoMapper 对象映射
.netcore
van久20 小时前
Day23 登录 + 颁发 Token(DDD 四层架构 + 企业标准)
.netcore
wangl_922 天前
C#性能优化完全指南 - 从原理到实践
开发语言·性能优化·c#·.net·.netcore·visual studio
宝桥南山6 天前
GitHub Models - 尝试一下使用GitHub Models
microsoft·ai·微软·c#·github·.netcore
武藤一雄6 天前
WPF进阶:万字详解WPF如何性能优化
windows·性能优化·c#·.net·wpf·.netcore·鲁棒性
van久10 天前
Day19:Service 业务层(企业架构核心)
.netcore
武藤一雄10 天前
WPF中逻辑树(Logical Tree)与可视化树(Visual Tree)到底是什么
microsoft·c#·.net·wpf·.netcore
武藤一雄13 天前
19个核心算法(C#版)
数据结构·windows·算法·c#·排序算法·.net·.netcore
van久15 天前
Day17:EF Core 增删改 + 事务
.netcore
MoFe116 天前
【.net core】【watercloud】处理rabbitmq类初始化时获取系统已注入的数据库连接问题(调用已注入服务)
数据库·rabbitmq·.netcore