什么是行为过滤器?
行为过滤器是你可以应用到一个控制器行为的,或者整个控制器的,来修改控制器行为的执行方式的属性。
当请求进入 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时