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(不适合做全局请求日志)
  • 效果一样,但范围不一样
  • 企业项目二选一,不要都用
相关推荐
csdn_aspnet11 天前
.NetCore Webapi 接口验证请求来源
.netcore·ip·token·签名·webapi·cors·sign
宝桥南山14 天前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
geovindu15 天前
CSharp:Condition Variable Pattern
后端·设计模式·c#·.net·.netcore·条件变量模式·同步型模式
geovindu20 天前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
geovindu20 天前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
geovindu20 天前
CSharp: Task Scheduler
开发语言·后端·c#·.net·.netcore
geovindu1 个月前
CSharp: Wordcloud
开发语言·后端·c#·.net·.netcore·词云
geovindu1 个月前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
全栈小51 个月前
【C#】.net core,静态方法线程安全解析,面试时经常被问的线程安全就藏在里面
安全·c#·.netcore
清风与日月1 个月前
Yitter.IdGenerator:高性能分布式唯一ID生成器详解
分布式·c#·.net·.netcore