2012-02-28 118 views
1

我尝试了MVC 4中的API控制器,并且在使用put,更新对象时有一个关于最佳实践的问题。Web API,API控制器以及如何更新模型?

我正在使用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网页实体-2。 ApiController中不存在UpdateModel,所以我的问题是做到这一点的最佳/首选方式是什么?

回答

0

只需调用RavenDB以加载具有适当ID的对象,对其内容进行更改并再次保留它。

不需要担心任何UpdateModel调用。它不适用于此。

请注意一个潜在的问题,因为您在模型中包含id。如果我发送PUT命令到http://server/controller/pages-3那个身体会发生什么?您应该向我发送错误的请求响应或类似的内容,具体取决于您希望API如何工作。

+2

”对其内容进行更改“这正是我的意思,在标准MVC中,我可以使用UpdateModel来更新我拥有的任何对象,但是我有什么选项可以在.net中合并两个对象?也许我对这个问题有错误的方法,但我认为它非常简单,我想保存/更新任何对象,我唯一确定的地方就是它实现了相同的接口或基类,我也是确定我收到的对象以某种方式扩展。 – Marcus 2012-02-29 08:04:53

0

是否有任何理由不在您的参数中明确表示?我将定义一个UpdateModel并将其作为参数而不是动态。那么它也可以对验证进行建模。

ASP.NET WebApi包括处理从JSON和XML转换为控制器方法的输入。我猜你的自定义mediatypeformatter的组合和动态的使用在这种情况下是不必要的,如果没有我遗漏的东西。 “