У меня есть веб-служба, созданная с использованием WebAPI, предоставляемой ASP.NET MVC 4.
Я знаю, что слой, поверх которого работает WebAPI, автоматически обрабатывает OData Queries (например, $filter
, $top
, $skip
), но что, если я хочу самостоятельно обработать фильтрацию?
Я не просто возвращаю данные из своей базы данных, но у меня есть еще один слой, который добавляет некоторые свойства, делает некоторые преобразования и т.д. Так что запрос Все мои данные, конвертируя их и возвращая их в класс WebAPI для фильтрации OData, не только достаточно хороши. Это, конечно, ужасно медленно, и в целом дрянной идеей.
Итак, существует ли способ распространять параметры запроса ODatastrong > из моей точки входа WebAPI в функции, которые я вызываю для получения и преобразования данных?
Например, GET на /api/people?$skip=10&$top=10
будет вызывать на сервере:
public IQueryable<Person> get() {
return PersonService.get(SomethingAboutCurrentRequest.CurrentOData);
}
И в PersonService
:
public IQueryable<Person> getPeople(var ODataQueries) {
IQueryable<ServerSidePerson> 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<Person> people = Converter.convertPersonList(serverPeople);
return people;
}