摘要: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
