ASP.NET Core面试精讲系列八

B站影视 电影资讯 2025-10-17 08:39 3

摘要:Authorization Filter:最先执行,用于身份验证与授权。Resource Filter:在模型绑定前运行,可控制缓存或资源访问。Action Filter:在 Action 执行前后执行。Exception Filter:处理 Action 中

过滤器是在 MVC 或 Razor Pages 管道中执行的组件,可在控制器方法执行的不同阶段插入逻辑。 类型包括:

Authorization Filter:最先执行,用于身份验证与授权。

Resource Filter:在模型绑定前运行,可控制缓存或资源访问。

Action Filter:在 Action 执行前后执行。

Exception Filter:处理 Action 中未捕获的异常。

Result Filter:在结果生成前后执行。

执行阶段

Middleware:全局 HTTP 管道

Filter:MVC/Razor 内部

作用范围

Middleware:所有请求

Filter:控制器 / Action

典型用途

Middleware:日志、认证、CORS

Filter:授权、验证、结果处理

可否中断

Middleware:可短路整个请求

Filter:可短路 MVC 执行

简言之:Middleware 处理全局逻辑,Filter 处理 MVC 层逻辑。

Authorization Filters

Resource Filters

模型绑定

Action Filters

Exception Filters

Result Filters

同类型过滤器可通过 Order 属性控制优先级。

示例:

public class CustomActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context) { }
public void OnActionExecuted(ActionExecutedContext context) { }
}
services.AddControllers(options => options.Filters.Add

或使用:

[ServiceFilter(typeof(CustomActionFilter))]

全局:在 AddControllers 中注册,对所有控制器生效。

局部:在控制器或 Action 上标注,仅限局部使用。

全局适合日志/异常,局部适合业务逻辑控制。

过滤器可通过上下文访问:

HttpContext 与请求信息

Action 参数与返回结果

可提前终止或修改执行结果

if (!IsAuthorized)
{
context.Result = new UnauthorizedResult;
}

二者结合可实现全局到局部的精细化控制。

来源:opendotnet

相关推荐