目录
过滤器概述
在 .NET Core 中,过滤器(Filters)和面向切面编程(AOP)有着紧密的联系,过滤器可以看作是 AOP 在 .NET Core 框架中的一种具体实现方式。
在.NET Core中过滤器是一种特殊的组件,它能够在请求处理管道的特定阶段执行自定义逻辑。借助过滤器,你可以把横切关注点(像日志记录、权限验证、异常处理等)从业务逻辑中分离出来,从而提升代码的可维护性与可复用性。
1. 授权过滤器(Authorization Filters)
作用:用于验证用户是否有权限访问某个资源,在请求进入控制器之前执行。若验证不通过,会阻止请求继续执行。
示例代码:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
public class CtsAuthorizationAttribute : Attribute, IAuthorizationFilter
{
// 鉴权
public void OnAuthorization(AuthorizationFilterContext context)
{
// 在进入控制器构造方法前执行,
Console.WriteLine(" Authorization ========= OnAuthorization");
}
}
2. 资源过滤器(Resource Filters)
作用:在授权之后、模型绑定之前执行,主要用于缓存和资源管理。
示例代码:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
/// <summary>
/// 自定义资源验证过滤器
/// </summary>
public class CtsResourceFilterAttribute : Attribute, IResourceFilter
{
// 资源验证之后
public void OnResourceExecuted(ResourceExecutedContext context)
{
Console.WriteLine("ResourceFilter=============OnResourceExecuted");
}
// 资源验证之前
public void OnResourceExecuting(ResourceExecutingContext context)
{
// 当context的Result 不等于空时, 被短路,不再会像下执行业务逻辑
// 节省资源的开销
// 通常利用该性质 做数据的缓存处理,[直接在进入控制器的方法前就获得了返回数据]
Console.WriteLine("ResourceFilter=============OnResourceExecuting");
}
}
3. 动作过滤器(Action Filters)
作用:在控制器方法执行前后执行,可用于日志记录、参数验证等。
示例代码:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
/// <summary>
/// 自定义动作验证过滤器
/// </summary>