【问题标题】:OData in Web API Doesn't Follow OData Standard SpecsWeb API 中的 OData 不遵循 OData 标准规范
【发布时间】:2013-06-10 12:19:43
【问题描述】:

首先,OData 响应的标准规范如下所示:

{
    "d" : {
        "results": [
            {
                "__metadata": {
                    "uri": "http://demos/Orders(10248)",
                    "type": "SampleModel.Order"
                },
                "ProductId": 10248,
                "Name": "Vgnon"
            }
        ],
        "__count": "1"
    }
}

但是,在 Web API(使用 EntitySetController)中,OData 响应如下所示:

    {
            "odata.metadata":"http://localhost:43111/api/$metadata#Products",
            "odata.count":"1",
            "value":
            [
                {
                  "ProductId":2,
                  "CreatedDate":"2013-06-10T23:53:26",
                  "CreatedBy":0,"Name":"Camera"
                }
            ]
        }

注意两个响应中的计数。 Web API 是否遵循 OData 标准规范?

另外,正如这个 SO 问题所指出的:Web API OData Inlinecount not working 答案是这样的:

$inlinecount 开箱即用仅在您发回 OData 响应时有效。

这是否意味着在 Web API 中(使用 EntitySetController 或 ODataController)我们可以返回 OData 响应和非 OData 响应?还是应该说,标准 OData 响应和非标准 OData 响应?

【问题讨论】:

  • 看2个响应,第一个OData响应其实是verbosejson格式或者Odata V2。 Web api 是 json light。第二种格式不包含任何元数据。
  • re $inlinecount:Web API 支持的不仅仅是 OData。如果您的 Web API 控制器返回纯 JSON 或纯 XML,则默认情况下不支持 $inlinecount。但它支持 OData 响应格式。
  • 我很好奇你是如何让你的 web api 在你的响应中返回 odata.count 的?

标签: asp.net-mvc asp.net-web-api odata


【解决方案1】:

WebAPI OData 实现确实遵循 OData 规范。您在问题顶部包含的 JSON 是旧的 OData JSON 格式,现在通常称为“详细 JSON”。 WebAPI 生成的 JSON 格式是 OData v3 及更高版本的新 OData JSON 格式。 WCF 数据服务将为 v3 服务中的“application/json”媒体类型生成相同的格式。

如果您想要旧格式,请尝试发送“application/json;odata=verbose”的 Accept 标头。

查看此处的规范以了解新 JSON 格式的说明:http://docs.oasis-open.org/odata/odata-json-format/v4.0/csprd01/odata-json-format-v4.0-csprd01.html (请注意,这是 OData v4 规范,尚未最终确定,但其中描述的关于 JSON 格式的大部分内容也适用于 v3)。

【讨论】:

    猜你喜欢
    • 2013-03-01
    • 2015-02-06
    • 2011-10-08
    • 2015-09-04
    • 2016-05-13
    • 2013-04-12
    • 2015-11-06
    • 1970-01-01
    • 2012-10-28
    相关资源
    最近更新 更多