1. 过滤器执行顺序 Authorzation filters (权限过滤器)>Resource filters(资源过滤器)>Action filters(方法过滤器)> Exception filters(异常过滤器)> Result filters(结果过滤器)
2.注册过滤器 public void ConfigureServices(IServiceCollection services)
{
// 过滤器执行顺序 身份-动作-异常
services.AddMvc(options =>
{
options.Filters.Add<AuthorizationFilters>(); // 添加身份验证过滤器
options.Filters.Add<ActionFilter>(); // 添加出动作过滤器
options.Filters.Add<ExceptionFilter>(); // 添加出异常过滤器
});
}
3.实现过滤器(以Authorzation filters为例)
public void ConfigureServices(IServiceCollection services)
{
// 过滤器执行顺序 身份-动作-异常
services.AddMvc(options =>
{
options.Filters.Add<AuthorizationFilters>(); // 添加身份验证过滤器
options.Filters.Add<ActionFilter>(); // 添加出动作过滤器
options.Filters.Add<ExceptionFilter>(); // 添加出异常过滤器
});
}
public class AuthorizationFilters : IAuthorizationFilter
{
/// <summary>
/// 获取验证方法示例
/// </summary>
private Security _security = Security.SecurityInstance;
/// <summary>
/// 请求验证,当前验证部分不要抛出异常,ExceptionFilter不会处理
/// </summary>
/// <param name="context">请求内容信息</param>
public void OnAuthorization(AuthorizationFilterContext context)
{
// 你的验证逻辑
//context.Result = new ValidErrorResult("验证失败");
}
public class ValidErrorResult : ObjectResult
{
public ValidErrorResult(object value) : base(value)
{
StatusCode = (int)HttpStatusCode.OK;
}
}
4. 备注,不要再权限过滤器中抛异常,异常过滤器不会出来,context.Result 赋值后请求会直接短路返回