ASP.NET Core面试精讲系列八

💡 原文中文,约1400字,阅读约需4分钟。
📝

内容提要

过滤器是 MVC 或 Razor Pages 中的组件,分为授权、资源、动作、异常和结果过滤器。它们的执行顺序和优先级可控,支持全局和局部注册。过滤器可访问请求信息并可提前终止执行。特性过滤器简单,服务过滤器支持依赖注入,二者结合实现精细控制。

🎯

关键要点

  • 过滤器是在 MVC 或 Razor Pages 管道中执行的组件,分为授权、资源、动作、异常和结果过滤器。
  • 过滤器的执行顺序和优先级可控,支持全局和局部注册。
  • 过滤器可访问请求信息并可提前终止执行。
  • 特性过滤器简单,服务过滤器支持依赖注入,二者结合实现精细控制。
  • Middleware 处理全局逻辑,Filter 处理 MVC 层逻辑。
  • 过滤器的执行顺序为:Authorization Filters -> Resource Filters -> Action Filters -> Exception Filters -> Result Filters。
  • 自定义过滤器可以通过实现 IActionFilter 接口来创建,并通过 AddControllers 注册。
  • 全局过滤器在 AddControllers 中注册,对所有控制器生效;局部过滤器在控制器或 Action 上标注,仅限局部使用。
  • 过滤器可通过上下文访问 HttpContext 与请求信息,并可提前终止或修改执行结果。
  • 过滤器可提前返回结果,阻止后续执行,称为短路(Short-circuiting)。
  • 特性过滤器简单直接,服务过滤器支持依赖注入。
  • Middleware 和 Filter 的结合可实现全局到局部的精细化控制。

延伸问答

过滤器在 ASP.NET Core 中的作用是什么?

过滤器是在 MVC 或 Razor Pages 管道中执行的组件,用于在控制器方法执行的不同阶段插入逻辑。

ASP.NET Core 中过滤器的类型有哪些?

过滤器分为授权过滤器、资源过滤器、动作过滤器、异常过滤器和结果过滤器。

如何创建自定义过滤器?

自定义过滤器可以通过实现 IActionFilter 接口来创建,并通过 AddControllers 注册。

全局过滤器和局部过滤器有什么区别?

全局过滤器在 AddControllers 中注册,对所有控制器生效;局部过滤器在控制器或 Action 上标注,仅限局部使用。

过滤器的执行顺序是怎样的?

过滤器的执行顺序为:授权过滤器 -> 资源过滤器 -> 动作过滤器 -> 异常过滤器 -> 结果过滤器。

什么是短路(Short-circuiting)?

短路是指过滤器可以提前返回结果,阻止后续执行,例如在未授权时返回 UnauthorizedResult。

➡️

继续阅读