Asp.net Web API过滤优先级

时间:2013-11-05 08:59:27

标签: c# asp.net asp.net-web-api action-filter

我有两个过滤器:

public class ValidateModelStateFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (actionContext.ModelState.IsValid == false)
        {
            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest);
        }
    }
}

public class AuthorizeRequestAttribute : Attribute, IAuthorizationFilter
{
    public bool AllowMultiple
    {
        get { return false; }
    }

    public async Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
    {
        // TODO: validate the request

        return await continuation();
    }
}

第一个是在Global.asax Application_Start方法中注册的:

protected void Application_Start()
{
    GlobalConfiguration.Configuration.Filters.Add(new ValidateModelStateFilter());
}

第二个添加到控制器操作:

[HttpGet]
[AuthorizeRequestAttribute]
public string GetValue(GetValueRequest request)
{
    return _service.GetValue(request.Product_Id);
}

除了在[AuthorizeRequestAttribute]过滤器之前执行[ValidateModelStateFilter]这一事实外,一切正常。

如何在任何其他过滤器之前执行[ValidateModelStateFilter]

1 个答案:

答案 0 :(得分:0)

IAuthorizationFilter将始终首先执行。您可以选择在实现iAuthorizationFilter的方法中执行ValidationModelStateFilter逻辑,从而确保它首先运行。 无论如何,你可能已经在这个阶段解决了你的问题。