c# - .NET 5 API 仅更新 JSON 上的字段(部分更新)
问题描述
我正在构建一个 .NET 5 API,但我遇到了一些问题。
我想知道是否可以仅更新我在 JSON 上发送的字段。
例如:
邮递员上的 JSON
{
"id": 14,
"name": "Pillar 1"
}
我的模型:
public class Pillar
{
[FromRoute]
public int ID { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
public int IDEvaluationType { get; set; }
[ForeignKey("IDEvaluationType")]
public EvaluationType EvaluationType { get; set; }
public ICollection<Competence> Competences { get; set; }
}
我的 API 控制器
[HttpPut("{id}")]
public async Task<IActionResult> PutPillar(int id, Pillar pillar)
{
if (id != pillar.ID)
{
return BadRequest();
}
_context.Entry(pillar).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!PillarExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
但是当在 VS 上请求和调试时,我没有发送的所有数据都设置为 null 或 0:
那就是用空值更新我的数据库,丢失我没有在 json 上发送的数据。我认为实体正在构建这样的查询:
更新支柱集 ID = 14,名称 = 'Pillar 123',IsActive = null,IDEvaluationType = null 其中 ID = 14
但是需要这样的查询:
更新支柱集名称 = 'Pillar 123' 其中 ID = 14
有没有办法只更新 JSON 上发送的字段?
谢谢你,有任何问题请告诉我。
解决方案
可以仅更改某些特定对象的字段子集,该操作称为“修补”。对于 REST 服务,您必须使用 PATCH 而不是 PUT,因为 PUT 总是意味着整个对象的更改。
微软网站上有一篇文章,如何实现 PATСH 请求处理,请看:https ://docs.microsoft.com/en-us/aspnet/core/web-api/jsonpatch?view=aspnetcore-5.0
推荐阅读
- react-native - console.error : "fontFamily "Material Icons" 不是系统字体,还没有通过 Font.loadAsync 加载
- amazon-web-services - 从我的电脑到达 aws instance jupyter notebook
- android - Android、Firebase:minSdkVersion 15 不能小于版本 16
- kotlin - Kotlin 中的“lambda@”是什么意思
- google-sheets - 导入范围和查询问题
- graphviz - 删除标签(表格)中的空格
- c# - 如何授权 OAuth 令牌
- reactjs - 如何使用 react-testing-libray 触发 onClose 以响应 ui 菜单?
- angular - NGRX 多个商店还是嵌套状态?
- python-3.x - 调用笔记本时在终端中显示日志记录输出