Wil*_*eer 17 c# asp.net rest model asp.net-web-api
假设我有这个模型
public partial class Todo
{
public int id { get; set; }
public string content { get; set; }
public bool done { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我将此作为json数据发送到我的控制器作为补丁请求.这绝对是一个复选框的动作.我认为它只是想把它发送到我的服务器,而不是整个模型.
{ "id":1, "done" : true }
Run Code Online (Sandbox Code Playgroud)
为了正确处理这个简单的json补丁请求,我的WebApi控制器需要看起来是什么样的?我应该使用web api,还是应该使用更多rpc风格的mvc方法?
这似乎是一件非常基本的事情,但我似乎无法做到正确!我想我可能需要在我的控制器方法中使用不同的参数,但我不确定.
感谢您的时间.
Dar*_*ler 12
将方法更改为PATCH不会以任何方式更改Web API行为.没有用于进行部分更新的内置机制.长期没有PATCH方法的原因之一是没有普遍存在的媒体类型来将补丁应用于资源.
其次,您要求Web API为您执行对象序列化,因此没有应用部分更新对象的概念.会有很多约定要达成一致,null值是什么意思,空值怎么样,我怎么说"不要更新这个DateTime".相关对象,子项目怎么样?如何删除子项目?除非CLR团队实现某种类型的概念,该概念只包含来自另一种类型的成员的子集,否则部分更新和对象序列化不能很好地结合在一起.
Aliostad提到UpdateModel,从HTML表单更新时可以这样做,因为媒体类型application/x-www-form-urlencoded明确允许任意一组名称值对.没有"对象序列化"正在进行.它只是匹配表单中的名称与Model对象上的名称的匹配.
对于我自己,我创建了一种新的媒体类型,用于进行部分更新,其工作方式类似于表单,但更先进,因为它可以处理分层数据,并维护更新的顺序.
Mak*_*jer 12
您可以在OData预发行版Nuget包中找到PATCH功能:Microsoft.AspNet.WebApi.OData.
有关如何使用它来创建处理PATCH的操作的信息可以在博客文章的部分更新(PATCH请求)部分中找到,该部分关于ASP.NET Web API中的OData支持.
| 归档时间: |
|
| 查看次数: |
13124 次 |
| 最近记录: |