【发布时间】: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