接收OData.PageResult <T>时如何避免406?

Eri*_*118 5 asp.net asp.net-mvc odata asp.net-mvc-4

我有一个返回PageResult的ODataController.

Api示例:

public PageResult<Customer> Get(ODataQueryOptions options) {
// cut some stuff out...

    PageResult<Customer> result = new PageResult<Customer>(
        searchResults as IEnumerable<Customer>,
        Request.GetNextPageLink(),
        Request.GetInlineCount());
    return result;
Run Code Online (Sandbox Code Playgroud)

当我调试它时,似乎很好并且正确构建了一个PageResult类来返回.在网络上..

网络示例

using (var client = new HttpClient()) {
    client.BaseAddress = new Uri(testURL);
    string searchUrl = "api/customer?$top=1&$skip=0";
    client.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json;odata=verbose"));
    HttpResponseMessage response = client.GetAsync(searchUrl).Result;
Run Code Online (Sandbox Code Playgroud)

响应是StatusCode 406,其中有一个原因短语说明内容不可接受.如果我定义一个新的MediaTypeWithQualityHeaderValue("application/json"),它也会这样做.

我需要更改什么才能在将控制器传递给视图之前在控制器中成功使用此Api?

Rag*_*nti 4

我认为您缺少构建 OData 服务的前两个步骤。ODataController,顾名思义,仅适用于 OData 路由。您需要构建代表 OData 服务的 EDM 模型,并添加公开该 EDM 模型的 OData 路由。有关如何构建 OData 服务的详细信息,请参阅此官方文档和博客文章。