什么是行为过滤器?
行为过滤器是你可以应用到一个控制器行为的,或者整个控制器的,来修改控制器行为的执行方式的属性。
当请求进入 API 接口的时候,操作过滤器提供了一个进入之前(before)和进入之后(after)介入功能,可以使用该过滤器对进入 API 的参数和结果进行干预。.
行为过滤器使用场景
我们请求该接口时必须带上固定的头才能请求 也可以使用行为过滤器。
通常我们在这些场景下如身份验证、日志记录、异常获取等会使用到过滤器
自定义一个Filter类:
public override void OnActionExecuting(ActionExecutingContext context)
{
try
{
//进入action之前
//比如写某个接口必须带上header请求和内容时
//当Orgid不等于123时显示非法请求
var token = context.HttpContext.Request.Headers["OrgId"].ToString();
if (token == "123")
{
base.OnActionExecuting(context);
}
else
{
throw new Exception("请求非法来源");
}
}
catch (Exception)
{
throw new Exception("请求非法来源");
}
}
public override void OnActionExecuted(ActionExecutedContext context)
{
Console.WriteLine("进入action之后,返回result前");
}
public override void OnResultExecuted(ResultExecutedContext context)
{
Console.WriteLine("返回result之后");
}
public override void OnResultExecuting(ResultExecutingContext context)
{
Console.WriteLine("返回result之前");
}
注册过滤器
注册过滤器有两种方式,一种是全局注册,另一种是局部注册
局部注册可以体现在类上或者方法上
全局注册
在startup类里面的ConfigureServices方法中
services.AddControllers(o=>o.Filters.Add( typeof(MyActionApiFilter)));
最后我们测试一下
不带header时
带header时