我正在尝试MVC4中的API控制器,并且有一个关于使用put、更新对象时的最佳实践的问题。
我使用RavenDB作为数据存储,并创建了一个自定义MediaTypeFormatter,它有一个JsonDynamicConverter类型的转换器,可以将json序列化和反序列化为动态对象。如上所述,我的API控制器Put方法如下所示
public void Put(string id, dynamic model) {}这个动态对象看起来有点像这样:
pageModel = {
"id": "pages-2",
"metadata": {
"changed": "2012-02-28T17:16:27.323Z"
},
"parent": {
"id": "pages-1",
"slug": null
},
"children": []
}所以,到目前为止一切正常,但是现在我需要用id pages-2更新我的实体。ApiController中不存在UpdateModel,因此我的问题是,执行此操作的最佳/首选方法是什么?
发布于 2012-02-29 08:15:12
只需调用RavenDB来加载具有适当ID的对象,对其内容进行更改,然后再次持久化它。
不需要担心任何UpdateModel调用。它不适用于这里。
注意一个潜在的问题,因为您在模型中包含了id。如果我使用该主体向http://server/controller/pages-3发送PUT命令,会发生什么情况?您可能应该向我发送一个错误的请求响应或类似的东西,这取决于您希望您的API如何工作。
发布于 2013-03-19 21:14:51
有什么理由不在你的参数中显式吗?我会定义一个UpdateModel,并将其作为参数而不是动态参数。然后,它还可以对验证进行建模。
ASP.NET WebApi包括从JSON和XML转换为控制器方法的输入的处理。如果我没有遗漏什么的话,我猜你的自定义mediatypeformatter和dynamic的组合在这种情况下是不必要的。
https://stackoverflow.com/questions/9486745
复制相似问题