【问题标题】:Can OData controller contains REST methods?OData 控制器可以包含 REST 方法吗?
【发布时间】: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


【解决方案1】:

我想出了一个解决方案,它涉及创建一个包含所有非 OData 方法的常规控制器、常规 OData 控制器和此 OData 控制器的自定义 HTTP 控制器选择器,因为这些都以 ODataController为后缀>.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多