在 .NET API 中获取原始 json 或字典

Get raw json or dictionary in .NET API

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

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

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

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

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

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

您需要原始 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
    }
}