OData控制器可以包含REST方法吗?

时间:2016-10-02 22:53:00

标签: c# rest asp.net-web-api odata

我在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标准。

1 个答案:

答案 0 :(得分:0)

我想出了一个解决方案,包括创建一个包含所有非OData方法的regural控制器,常规OData控制器和这个OData控制器的自定义HTTP控制器选择器,因为它们带有 ODataController