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久20 小时前
Day14: 搭建企业标准的DDD 简洁版四层架构
架构·.netcore
van久1 天前
ADay15-1: 安装 EF Core 包 到 对应DDD(领域驱动设计)四层架构‌
.netcore
时光追逐者2 天前
C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
c#·.net·.netcore
willhuo4 天前
基于Playwright的抖音网页自动化浏览器项目使用指南
爬虫·c#·.netcore·webview
csdn_aspnet5 天前
在 .NET Core 8 中实现 CORS
.netcore·跨域·cors·.net8
csdn_aspnet6 天前
在 ASP.NET Core (WebAPI) 中启用 CORS
后端·asp.net·.netcore
观无7 天前
Windows 本地电脑搭建一个私有的、类似 Gitee 的 Git 服务
gitee·jenkins·.netcore
武藤一雄9 天前
C# 异常(Exception)处理避坑指南
windows·microsoft·c#·.net·.netcore·鲁棒性
csdn_aspnet10 天前
在 ASP.NET Core 中使用自定义属性实现 HTTP 请求和响应加密
http·asp.net·.netcore