【问题标题】:WebApi Odata: remove metadata from responseWebApi Odata:从响应中删除元数据
【发布时间】:2016-01-26 20:54:47
【问题描述】:

我正在开发一个供内部使用的 WebApi Odata 服务。我想从服务器的响应中删除除序列化数据之外的所有其他数据。 我想删除所有这些东西:

{
  "@odata.context":"http://192.168.150.86:9933/odata/$metadata#Terminal","value":[

  ]
}

这里只留下“终端”数组

有什么办法吗?

【问题讨论】:

    标签: odata asp.net-web-api


    【解决方案1】:

    将以下选项添加到您的查询字符串:

    $format=application/json;odata.metadata=none
    

    这将从您的结果中删除 odata 元数据。

    【讨论】:

    • 它没有用。我在邮递员中尝试使用 Content-type 标头,也尝试作为 Accept 标头,但这些都不适合我。
    • @IshworKhanal 它应该被添加到您的 URL 查询字符串而不是标题中。以下是它的外观:example.com/myapi?$format=application/json;odata.metadata=none
    • 如果我将其添加为 OData 查询字符串指令,如本答案所示,它对我都有效,但如果我使用 Fiddler 发送带有以下请求标头的请求,它也适用:接受:应用程序/ json;odata.metadata=none 两者都给出相同的结果:@odata.context 行不包含在响应中。
    【解决方案2】:

    这就是它的实现方式。

    var ODataJSON = JsonConvert.DeserializeObject<JObject>(json);
    ODataJSON.Property("@odata.context").Remove();
    ODataJSON.Add("Terminal", ODataJSON["value"]); //adding Terminal attribute
    ODataJSON.Property("value").Remove(); // removing default value attribute.
    

    【讨论】:

    • 我需要从服务器端的响应中删除它,而不是在客户端
    • 最初的问题没有具体说明,但据我所知,这不能删除,这是 odata 默认返回的内容
    【解决方案3】:

    你也可以设置Accept标头

    Accept: application/json;odata.metadata=none
    

    【讨论】:

      【解决方案4】:

      假设您正在编写一个返回 IHttpActionResult 的新函数。要返回数据,您可以使用 Json 方法。它删除了元数据

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-03
        • 2015-04-10
        • 1970-01-01
        • 2015-02-17
        • 2015-08-11
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        相关资源
        最近更新 更多