2016-10-02 2 views
0

Я создал OData 4 контроллера в Web API 2, который выглядит следующим образом:Может ли контроллер OData содержать методы REST?

public class BooksController : ODataController 
{ 
    private ICollection<Book> books; 

    public BooksController() 
    { 
     this.books = new Collection<Book>() 
     { 
      new Book() { Id = "1", Title = "B1", Price = new Money(1, "EUR") }, 
      new Book() { Id = "2", Title = "B2", Price = new Money(2, "EUR") } 
     }; 
    } 

    [EnableQuery] 
    public IQueryable<Book> Get() 
    { 
     return this.books.AsQueryable(); 
    } 
} 

Проблема заключается в том, когда я хочу создать регулярный метод REST, как это:

[HttpGet] 
[Route(("api/books"))] 
public IEnumerable<Book> GetAll([FromUri] PaginationDto paginationDto) 
{ 
... 
} 

Первый метод доступный запрос /odata/Books. Ответ содержит данные в соответствии со спецификацией OData. Второй способ (должен быть) доступен по запросу /api/books. Ответ должен содержать стандартный массив JSON объектов PLU.

Как я мог достичь этого?

Либо я могу создать чистый контроллер OData или обычный контроллер REST (полученный от ApiController), который, к сожалению, не соответствует стандарту OData при запросе маршрута OData /odata/Books.

+1

Вы должны иметь возможность создать другой контроллер, наследующий от ApiController, чтобы содержать только операции, отличные от OData. Это решение проблемы? – Scottie

ответ

0

Я придумал решение, которое включает в себя создание контроллера, содержащий нормальную все немедикаментозные методы OData, регулярный контроллер OData и пользовательский HTTP селектор контроллера для этого OData контроллера, потому что они это posfixed с ODataController.

 Смежные вопросы

  • Нет связанных вопросов^_^