我正在寻找使用 REST API (ASP.NET) 对对象应用部分更新的最佳解决方案
我原本想使用“JSON合并补丁”格式(rfc7396),但我无法使用ASP.NET做到这一点(很难区分被忽略的字段,以及设置为空的字段)
我尝试使用 JSON PATCH 格式的 PATCH 并且它正在工作。
例如。 :
[
{ "op": "replace", "path": "/Name", "value": "patchedValue" },
{ "op": "replace", "path": "/EnumTest", "value": "blo" },
{ "op": "replace", "path": "/SubItem/Name", "value": "patchedValue" }
]
我看到微软支持这种格式(asp.net core json patch),但我不知道这种格式是否经常使用。我不想成为唯一使用它的人...我正在寻找使用这种格式进行部分更新的大公司的 API。你有一些例子吗?
由于我无法区分要设置为 NULL 的属性和忽略的属性,并且我想向使用 API 的人发出一个简单的请求,所以我的解决方法是:
手动读取请求JSON而不是反序列化它
person.JsonObject = await Request.Content.ReadJsonAsync();
让我的模型继承这个类
public class RequestBase
{
internal JObject JsonObject { get; set; }
internal bool IsJsonPropertySet(string propertyPath)
{
if (JsonObject == null)
return true; // if null => full update.
return JsonObject.SelectToken(propertyPath) != null;
}
}
对于每个属性,手动检查是否在 JSON 中设置并更新值
if (src.IsJsonPropertySet("validity.startDate"))
dest.ValidityStartDate = src.Validity.StartDate;
我确信有更好的解决方案,但我没有为我的旧 Web API 项目找到它......