asp.net-mvc-3 – WebAPI PUT / POST中的部分实体更新
假设您有一个存储库方法来更新文档:
public Document UpdateDocument(Document document) { Document serverDocument = _db.Documents.Find(document.Id); serverDocument.Title = document.Title; serverDocument.Content = document.Content; _db.SaveChanges(); return serverDocument; } 在这种情况下,实体有两个属性.更新文档时,JSON请求中都需要这两个属性,因此请求PUT / api /文件夹与一个 { "documentId" = "1","title" = "Updated Title" } 将返回错误,因为没有提供“内容”.我这样做的原因是因为即使用户不能更新的可空属性和属性,强制客户端在请求中指定这些字段似乎更安全,以避免用空服务器覆盖未指定的字段. 这导致我在PUT和POST请求中始终要求每个可更新属性的做法,即使这意味着为这些属性指定null. 这是很酷,还是有一个我还没有学到的模式/实践,这可能通过发送只需要通过电线来促进部分更新? 解决方法
API设计中的最佳做法是使用HTTP PATCH进行部分更新.
事实上,像你这样的用例是IETF首先介绍它的原因. RFC 5789定义非常精确:
Mark Nottingham在API设计 – http://www.mnot.net/blog/2012/09/05/patch中写了一篇关于使用PATCH的伟大文章 在你的情况下,那将是: [AcceptVerbs("PATCH")] public Document PatchDocument(Document document) { Document serverDocument = _db.Documents.Find(document.Id); serverDocument.Title = document.Title; serverDocument.Content = document.Content; _db.SaveChanges(); return serverDocument; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – WebForms:MasterPages中的动态(或绝对)脚本标记
- asp-classic – 如何使用Microsoft.XMLHTTP指定代理配置?
- asp.net-mvc – 对每个动作调用使用MVC Miniprofiler
- asp.net – 会话 – 多个浏览器选项卡 – 不同的会话?
- asp.net验证文本框 – 至少有一个文本框必须包含数据
- ASP.Net错误:“应用程序池的身份无效”
- asp.net-mvc-4 – ASP.NET实体框架可以自动生成数据注释吗?
- Asp.net配合easyui实现返回json数据实例
- asp.net-mvc – 如何使用jQuery UI Datepicker与MVC的Html.
- asp.net-mvc – 带密码的.NET核心分布式Redis缓存
- entity-framework – 有没有办法让ASP.NET 5依赖
- asp.net-mvc – ASP.NET MVC依赖注入Unity与WCF服
- ASP.NET Verses Winforms
- asp.net-web-api2 – 如何创建HttpRequestHeader
- asp.net – 将routeValues的Dictionary传递给Act
- asp.net-mvc – enable-migrations错误:项目无法
- asp.net – Visual Studio不识别新类
- mvc项目架构分享系列之架构搭建之Infrastructure
- asp.net-mvc – ASP.Net MVC如何确定用户是否可以
- VS2019安装好后,经常打不开软件没反应解决方法