PATCH请求正文中的REST实体ID

时间:2013-02-15 15:28:47

标签: asp.net xml json rest asp.net-web-api

假设我的网站服务公开了一个ID为35的FooEnity,它位于/myhost/api/fooentity/35

现在我想实现一个PATCH调用,以允许对FooEntity进行部分更新(因此,假设25个可用字段中有2个被传递以进行更新)。

我的问题是,如果PATCH内容(json / xml)包含35的id吗?实体的地址由URI指定,id不是可更新字段,如果包含它,则需要进行额外验证以确保两个ID匹配。所有这些都表明。尽管如此,没有它在那里感觉很奇怪。

这样做的恰当方法是什么?

(注意,问题与语言无关,但是在ASP.NET 4.0 Web API框架中实现,如果这会影响任何人的答案)。

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题!

有两种方法可以解决这个问题。如果正文中的id与URI中的id不同,则可以引发验证错误。或者你可以忽略请求体中的任何id。如果您通过手动复制属性进行修补,则不会复制id属性以忽略它。如果您正在使用帮助程序类来修补实体,则可以应用修补程序,然后将实体的ID设置为URI中的任何内容,以确保它在修补程序之后保持相同的ID。

您选择的任何选项都取决于您。如果请求正文ID与实体id不匹配,则返回400对于客户端可能会更清楚,因此他们知道id不会被更改,但它还需要您编写更多代码来实现。