Asp.net mvc Web API中的OData不';不要遵循OData标准规范

Asp.net mvc Web API中的OData不';不要遵循OData标准规范,asp.net-mvc,asp.net-web-api,odata,Asp.net Mvc,Asp.net Web Api,Odata,首先,OData响应的标准规范如下所示: { "d" : { "results": [ { "__metadata": { "uri": "http://demos/Orders(10248)", "type": "SampleModel.Order" }, "Product

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

{
    "d" : {
        "results": [
            {
                "__metadata": {
                    "uri": "http://demos/Orders(10248)",
                    "type": "SampleModel.Order"
                },
                "ProductId": 10248,
                "Name": "Vgnon"
            }
        ],
        "__count": "1"
    }
}
    {
            "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(使用EntitySetController)中,OData响应如下所示:

{
    "d" : {
        "results": [
            {
                "__metadata": {
                    "uri": "http://demos/Orders(10248)",
                    "type": "SampleModel.Order"
                },
                "ProductId": 10248,
                "Name": "Vgnon"
            }
        ],
        "__count": "1"
    }
}
    {
            "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标准规范

此外,正如这个问题所指出的: 答案是这样的:

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


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

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

如果需要旧格式,请尝试发送“application/json;odata=verbose”的接受头

请参阅此处的规范,了解新JSON格式的解释:
(请注意,这是OData v4规范,尚未最终确定,但其中关于JSON格式的大部分描述也适用于v3)。

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

如果需要旧格式,请尝试发送“application/json;odata=verbose”的接受头

请参阅此处的规范,了解新JSON格式的解释:
(请注意,这是OData v4规范,尚未最终确定,但其中关于JSON格式的大部分描述也适用于v3)。

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