Web Api的过滤器(Filter)使用的面向切面(Aspect Oriented Programming)的编程思想,该机制使得编程人员可以很方便的向Web Api的主逻辑中添加一些额外的逻辑,比如身份验证预授权、数据模型验证以及格式化异常处理等。
在实际编程实现中,过滤器其实就是作用于Web Api Controller的一个或多个Action之上的Attribute。以下是比较常用的可供实现自定义过滤器的接口和类。
接口 | 类 | 简介 |
---|---|---|
IActionFilter | ActionFilterAttribute | 向Action运行前后添加逻辑;其OnActionExecuting函数作用于Action运行前,OnActionExecuted函数作用于Action运行后 |
IAuthenticationFilter | 在Action运行前对请求方进行身份验证 | |
IAuthorizationFilter | AuthorizationFilterAttribute | 在Action运行前对请求方进行权限验证 |
IExceptionFilter | ExceptionFilterAttribute | Action运行结束后进行异常捕获及处理 |
这些不同类型的过滤器的执行顺序如下图所示,用户可跟据业务逻辑需要在任意一个过滤函数中返回response,从而实现短路操作。对于用一类型的多个过滤器而言,其执行顺序取决于其被的添加顺序,且全局过滤器先于局部过滤器被执行。
如果希望做开发的过滤器作用于应用程序的所有Action之上,用户可以直接通过在WebApiConfig.cs中的Register函数中添加如下代码来实现。
config.Filters.Add(new YourFilter());