ASP .NET MVC 4 WebApi: ручная обработка запросов OData

У меня есть веб-сервис, созданный с использованием 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;
}

54
задан frapontillo 27 May 2012 в 21:25
поделиться