Web API Filter

在Web Api中,有三种Filter

Filter类型 实现的接口 描述
Authorization IAuthorizationFilter 最先运行的Filter,被用作请求权限校验
Action IActionFilter 在Action运行的前、后运行
Exception IExceptionFilter 当异常发生的时候运行

 

 

 

 

 

 

需要哪种过滤器就实现哪个接口

下面主要说IAuthorizationFilter

注意是 System.Web.Http.Filters 命名空间下的

实现后会有一个AllowMultiple的属性和ExecuteAuthorizationFilterAsync的方法

public class filter : IAuthorizationFilter
    {
        public bool AllowMultiple => throw new NotImplementedException();

        public Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
        {
            throw new NotImplementedException();
        }
    }

AllowMultiple是设置是否支持并发的属性,如果想要支持就把=>后面改为true

public bool AllowMultiple => true;

 

ExecuteAuthorizationFilterAsync 内

return await continuation();就是继续向下执行

return new HttpResponseMessage();就是中止操作,直接以HttpResponseMessage为返回值

 

我们弄好了filter,怎么让它起作用?

注册filter一共有三种方式

第一种:

在Action上添加特性 [AuthFilter]

这样这个Action就会触发filter,适合单个Action的权限控制

public class StudentController : ApiController
{
    [AuthFilter]
    public string Post(CreateUser user)
    {
       return "";
    }
}

第二种:

在Controller上添加特性 [AuthFilter]

这样这个controller的所有action都会触发filter,适合整个controller的权限控制

[AuthFilter]
public class StudentController : ApiController
{
    public string Post(CreateUser user)
    {
       return "";
    }
}

第三种:

在App_Start的WebApiConfig中加入

这样这个项目的所有controller所有action都会触发filter

public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Filters.Add(new filter()); //添加过滤器

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }

但是我们如果有个别action不想触发filter怎么办?

可以在这个action上添加特性[AllowAnonymous],这样过滤器就会"放过"这个action

posted @ 2017-11-28 17:35  生命不息bug不止  阅读(330)  评论(0编辑  收藏  举报