我在Web API 2中创建了OData 4控制器,如下所示:
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
来访问。响应应该包含PLU对象的标准JSON数组。
我怎么能实现这个目标?
要么我能够创建纯OData控制器或常规REST控制器(从ApiController派生),在请求OData路由/odata/Books
时,不幸的是不符合OData标准。
答案 0 :(得分:0)
我想出了一个解决方案,包括创建一个包含所有非OData方法的regural控制器,常规OData控制器和这个OData控制器的自定义HTTP控制器选择器,因为它们带有 ODataController