在 .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
}
}
我正在尝试在 .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
}
}