【问题标题】:Limit returned JSON child depth in ASP.NET Web API限制 ASP.NET Web API 中返回的 JSON 子深度
【发布时间】:2016-06-24 00:17:04
【问题描述】:

我正在使用 ASP.NET Web API 创建一个 RESTful API。我正在尝试找出限制子对象显示的数据量的最佳方法。

为了解释,我有三个实体,Objects、Channels 和 ChannelData。一个对象可以有 0 个或多个 Channel,一个 Channel 可以有 0 个或多个 ChannelData(通常为 1000 个)。

我想要以下端点:

  • /api/Objects

    • 返回对象及其通道的 JSON 列表,但返回 ChannelData(可能是摘要数据,例如数据量等)。
  • /api/Objects/{{objectId}}/ChannelData?channel={{channelName}}

    • 以 JSON 格式返回特定对象的特定通道的所有数据。

默认情况下,Web API 会尝试显示 /api/Objects 中的所有内容,包括 1000 个 ChannelData 对象。防止 ChannelData 数组出现在特定端点的最佳方法是什么?

【问题讨论】:

  • Web API 仅显示您在方法中返回的内容。那么,不要加载channeldata?
  • 你在使用 ORM 吗?您可以发布您的GET 方法的代码吗?
  • 对象包含一个 Channels 列表,其中包含一个 ChannelData 列表。如果我返回一个对象,它将自动包含 Channels 列表和 ChannelData 列表。

标签: c# asp.net json api asp.net-web-api


【解决方案1】:

其实实现这一点最好的方法是“不加载数据”;你也可以考虑用不同的模型改变你的方法的响应。

无论如何,如果你不能这样做,你可以尝试在 ChannelData 属性上使用这个标签[JsonIgnore](如果你使用 xml 格式化程序,则使用[IgnoreDataMember]);序列化引擎将在响应生成期间跳过该属性。

查看this 文章或this 文章了解更多详情或this SO 答案。

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2013-03-21
    相关资源
    最近更新 更多