【问题标题】:Get raw json or dictionary in .NET API在 .NET API 中获取原始 json 或字典
【发布时间】:2015-02-09 21:07:43
【问题描述】:

我正在尝试在 .NET WebAPI 的路由中获取一组非模型绑定的 json 数据。背景故事是我想根据传入的内容更新一些字段,而不是覆盖整个对象。因此,请求将如下所示:

path: ./api/user/2    PUT
json: { "email":"doodly@test.com"}

现在,在 PUT 的脚手架方法中,这将用新电子邮件和一堆空值覆盖 id=2 的用户其他列。这是因为 json 是自动绑定到模型的,当创建该对象时,不存在的值为 null。

我可以简单地检查传递的对象中的 null 并且只更新非 null 字段,但是如果有人执行以下操作,它会中断:

json: { "email":"doodly@test.com", "phone":null }

在这种情况下,电话不会在应该被取消的时候被取消,因为它会被跳过。因此,我需要按原样获取 json,以了解如何以及在给定 id 的记录上更新什么。我该怎么做?

【问题讨论】:

  • 对不同类型的更新有不同的操作?
  • @DixonD 你能详细说明一下吗?我不确定如何处理这个问题。

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


【解决方案1】:

您需要原始 JSON,还是 JObject 适合您?

public void Put([FromBody] JObject jsonData)
{
    JToken token;
    if (jsonData.TryGetValue("phone", out token))
    {
        var value = (string)token;
        if (value == null)
        {
            // phone property exists but has null value
        }
        else
        {
            // phone property exists and has non-null value
        }
    }
    else
    {
        // phone property does not exist
    }
}

【讨论】:

  • 我从未使用过 JObjects。以这种方式访问​​属性的格式是什么?
  • @steven:我已经更新了我的答案,以展示您如何使用JObject。 (显然,您可以将其提取到帮助程序和/或扩展方法中,以保持您的操作/控制器代码干净易读。)
猜你喜欢
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2018-10-24
  • 1970-01-01
  • 2013-04-18
  • 2018-04-16
相关资源
最近更新 更多