我有两个过滤器:
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]
?
答案 0 :(得分:0)
IAuthorizationFilter将始终首先执行。您可以选择在实现iAuthorizationFilter的方法中执行ValidationModelStateFilter逻辑,从而确保它首先运行。 无论如何,你可能已经在这个阶段解决了你的问题。