在所有ASP。. NET WebAPI的例子,我已经看到实现HTTP PUT
方法,记录的键作为一个单独的参数传递给模型更新。例如:
[HttpPut]
public HttpResponseMessage Put(int id, UserEditViewModel model)
{
// Look up existing record
User user = await db.Users.FindAsync(id);
// Apply changes
// user.Name = model.Name;
// Commit updated record to data store
db.SaveChanges();
}
我很好奇为什么使用这种方法而不是定义模型上的键值并简化调用?
public HttpResponseMessage Put(UserEditViewModel model)
{
// Look up existing record
User user = await db.Users.FindAsync(model.UserId);
// Apply changes
// user.Name = model.Name;
// Commit updated record to data store
db.SaveChanges();
}
在大多数情况下,我能想到的视图将需要UserId
无论如何,所以我不知道如何/为什么它会从视图的角度复杂的模型,但我相信一定有一个很好的理由。
取决于我们讨论的rest级别,我认为它可能更多的是关于便利性。看看Richardson的成熟度模型第3级,工作流可能是这样的:
GET /api/users/{id}
一旦客户端导航到一个用户,服务器将构建链接uri,用唯一的资源标识符填充它,所以它看起来像这样:
"api:user-edit": {
"href": "http://apiname:port/api/user/{id}"
},
所以客户端需要输入
PUT /api/users/{id}
具有适当的有效负载(理论上应该是完整的资源,但通常情况下服务器将只选择查看几个字段-几乎像PATCH
)。