【发布时间】:2014-09-22 18:00:46
【问题描述】:
考虑一个 RESTful 服务,它公开类型为 Product 的实体,其类声明如下:
public class Product
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public double Price { get; set; }
}
现在假设我们要完全更新ID 为123 的Product。然后我们可以通过执行一个标准的 HTTP PUT 请求来轻松地做到这一点,如下所示:
PUT /odata/Products(123) HTTP/1.1
Host: localhost:1337
Content-Type: application/json
{
"ID": 123,
"Name": "Shirt",
"Price": 19.99
}
重复密钥两次的理由是什么?即使我们从 URL 中省略了 ID 键,我们是否仍然能够完全更新 Product 实体,因为我们总是可以从请求正文中提取键?我知道 PUT 旨在是幂等的,并且可以通过使用 PATCH 而不是 PUT 完全避免这种冗余问题,但我只是想知道这个奇怪约定背后的动机。我尝试阅读official protocol documentation for PUT,但他们似乎没有谈论它。
【问题讨论】:
-
不确定这里的正确性,但我通常会创建两个视图模型。一个用于整个实体,另一个用于编辑/创建我省略 Id 的实体。
标签: c# rest key httprequest put