У меня есть веб-сервис, созданный с использованием WebAPIпредоставляется ASP .NET MVC 4.
Я знаю, что слой, над которым работает WebAPI, автоматически обрабатывает запросы OData(такие как $filter
, $top
, $skip
), но что, если я хочу сам справиться с фильтрацией?
Я не просто возвращаю данные из моей базы данных, но у меня есть еще один слой, который добавляет некоторые свойства, выполняет некоторые преобразования и т. д. Поэтому запрашиваю ВСЕ мои данные, преобразовываю их и возвращаю в класс WebAPI для OData. фильтрация не просто достаточно хороша. Это конечно жутко медленно, и вообще дрянная идея.
Итак, есть ли способ распространить параметры запроса ODataиз моей точки входа WebAPI в функции, которые я вызываю для получения и преобразования данных?
Например, GET для /api/people?$skip=10&$top=10
вызовет на сервере:
public IQueryable get() {
return PersonService.get(SomethingAboutCurrentRequest.CurrentOData);
}
А в PersonService
:
public IQueryable getPeople(var ODataQueries) {
IQueryable serverPeople = from p in dbContext.ServerSidePerson select p;
// Make the OData queries
// Skip
serverPeople = serverPeople.Skip(ODataQueries.Skip);
// Take
serverPeople = serverPeople.Take(ODataQueries.Take);
// And so on
// ...
// Then, convert them
IQueryable people = Converter.convertPersonList(serverPeople);
return people;
}