MVC filter attributes support the Order property for setting the execution order when multiple instances are applied to a controller or method, those in Web API don't.
Comments: As a work around you can look into overriding GetFilterPipeLine in HttpActionDescriptor. ``` public override Collection<FilterInfo> GetFilterPipeline() { Collection<FilterInfo> originalFilters = _innerDescriptor.GetFilterPipeline(); Collection<FilterInfo> newFilters = new Collection<FilterInfo>(); // AS AN EXAMPLE, HERE IS HOW TO REPLACE A FILTER WITH YOUR OWN // SIMILARLY YOU CAN CHANGE THE ORDER // for any actions that support query composition, we need to replace it with our // query filter. foreach (FilterInfo filterInfo in originalFilters) { FilterInfo newInfo = filterInfo; QueryableAttribute queryableFilter = filterInfo.Instance as QueryableAttribute; if (queryableFilter != null) { newInfo = new FilterInfo(new QueryFilterAttribute() { ResultLimit = queryableFilter.ResultLimit }, filterInfo.Scope); } newFilters.Add(newInfo); } return newFilters; } ```
Comments: As a work around you can look into overriding GetFilterPipeLine in HttpActionDescriptor. ``` public override Collection<FilterInfo> GetFilterPipeline() { Collection<FilterInfo> originalFilters = _innerDescriptor.GetFilterPipeline(); Collection<FilterInfo> newFilters = new Collection<FilterInfo>(); // AS AN EXAMPLE, HERE IS HOW TO REPLACE A FILTER WITH YOUR OWN // SIMILARLY YOU CAN CHANGE THE ORDER // for any actions that support query composition, we need to replace it with our // query filter. foreach (FilterInfo filterInfo in originalFilters) { FilterInfo newInfo = filterInfo; QueryableAttribute queryableFilter = filterInfo.Instance as QueryableAttribute; if (queryableFilter != null) { newInfo = new FilterInfo(new QueryFilterAttribute() { ResultLimit = queryableFilter.ResultLimit }, filterInfo.Scope); } newFilters.Add(newInfo); } return newFilters; } ```