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(不适合做全局请求日志)
  • 效果一样,但范围不一样
  • 企业项目二选一,不要都用
相关推荐
啊这啊这 六弦之首2 天前
.NET Core跨平台的奥秘[中篇]:复用之殇
.netcore
心念枕惊2 天前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
完美火龙篇 四月的友4 天前
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
.net·.netcore
时代的狂19 天前
如何理解 C# 的 async 和 await
c#·.netcore·async·await
尼米棕熊21 天前
.NET CORE认证模块-注册方案与请求认证探究
.netcore
鸠摩智首席音效师2 个月前
如何在 macOS 上安装 .NET Core ?
macos·.netcore
宝桥南山2 个月前
Microsoft Agent Framework(MAF) - 如何将workflow或者A2A client转换成一个AI Agent
microsoft·ai·微软·aigc·.net·.netcore
滴滴答答哒2 个月前
.NET Core 基于 AOP + Polly 实现数据库死锁自动重试
数据库·.netcore·sqlsugar
.NET修仙日记2 个月前
.NET EFCore批量插入性能优化实战:30秒 → 0.5秒
性能优化·c#·.net·.netcore·微软技术·efcore·踩坑实录
Kimhill张2 个月前
.net core8 WPF 依赖注入(DI)
wpf·.netcore