Я думаю, что вы собираетесь использовать собственную проверку фильтра, поскольку нет встроенного языка для того, что вы фильтруете. Это может или не может быть полезным для вас, но я бы порекомендовал использовать ModelBinder для выполнения вашей проверки, поэтому, когда ваши методы контроллера запущены, вы уже проверили содержимое всех параметров. Я бы предложил вернуть из вашего ModelBinder объект, который соответствует вашим бизнес-потребностям в вашем приложении. Вы можете, конечно, использовать конструкции OData, чтобы помочь вам сделать это. Вот фрагмент кода из нашей системы, который запускает этот процесс. Это может быть полезно, чтобы вы пошли на свой собственный Binder.
private T CreateQueryOptions<T>(string url, [CallerMemberName] string caller = null) where T : class
{
var httpRequest = new HttpRequestMessage(HttpMethod.Get, url);
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<T>(caller);
var odata = new ODataQueryOptions<T>(new ODataQueryContext(modelBuilder.GetEdmModel(), typeof(T)), httpRequest);
// rest of your code here to validate OData parameters Generics may not be appropriate for you.
}
Но это works for me
в реальной системе с сотнями миллионов вызовов / день.