【发布时间】:2017-02-10 20:44:03
【问题描述】:
我在 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 标准。
【问题讨论】:
-
您应该能够创建另一个从 ApiController 继承的控制器以仅包含非 OData 操作。这能解决问题吗?
标签: c# rest asp.net-web-api odata