请解释 ASP.NET Core 过滤器的作用,并列出其常见的几种类型及其执行顺序。
考察说明
考查对 ASP.NET Core 请求管道中过滤器机制的理解,以及能否清晰区分不同过滤器类型及其执行时机。
回答思路
- 【回答框架 1】过滤器是 ASP.NET Core MVC 中用于在请求处理管道的特定阶段执行横切逻辑的组件,例如身份验证、日志、异常处理等。它们基于管道模型,在控制器动作执行前、后等时机运行。
- 【回答框架 2】常见的过滤器类型有五种:授权过滤器(Authorization Filter)最先执行,用于确认用户是否有权限访问资源;资源过滤器(Resource Filter)在授权之后、模型绑定之前运行,可缓存或修改请求;动作过滤器(Action Filter)包裹动作方法的执行,可干预参数、返回值;异常过滤器(Exception Filter)用于处理动作中未捕获的异常;结果过滤器(Result Filter)包裹结果执行,可修改响应内容。
- 【回答框架 3】执行顺序为:授权过滤器 → 资源过滤器 → 动作过滤器(动作方法执行前、后)→ 异常过滤器(仅在异常时)→ 结果过滤器。其中,资源过滤器在整个管道中最早接触请求(除了授权),结果过滤器最后处理响应。
- 【回答框架 4】每种过滤器可通过实现对应接口(如 IAuthorizationFilter、IResourceFilter)或继承特性类(如 AuthorizeAttribute、ActionFilterAttribute)来应用。过滤器还可以通过服务注入或全局注册,控制作用范围。
- 【回答框架 5】理解过滤器的执行顺序和时机对正确实现横切逻辑至关重要,例如在资源过滤器中做缓存可避免后续管道执行,而在异常过滤器中处理异常可避免污染动作结果。
- 【关键点 1】ASP.NET Core 提供五种过滤器:授权、资源、动作、异常、结果。
- 【关键点 2】执行顺序固定:授权 → 资源 → 动作 → (异常)→ 结果。
- 【关键点 3】过滤器可全局、控制器或动作级别注册,通过接口或特性实现。
- 【关键点 4】资源过滤器执行最早(授权后),适合做缓存或操作未绑定模型的数据。
- 【关键点 5】结果过滤器最后执行,可修改最终响应输出。
- 【易错点 1】容易混淆资源过滤器和动作过滤器的执行时机,资源过滤器在模型绑定之前,动作过滤器在动作方法前后。
- 【易错点 2】异常过滤器仅在未捕获异常时执行,不能依赖它处理所有异常,应组合其他异常处理机制。
- 【易错点 3】过滤器并非 AOP 的完全替代,它们只覆盖 MVC 管道,不适用于中间件级别。