1

我正在尝试 MVC 4 中的 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 更新我的实体。UpdateModel 在 ApiController 中不存在,所以我的问题是最好/首选的方法是什么?

4

2 回答 2

0

只需调用 RavenDB 以使用适当的 ID 加载对象,对其内容进行更改并再次持久化。

无需担心任何 UpdateModel 调用。它不适用于这里。

请注意一个潜在问题,因为您将 id 包含在模型中。如果我使用该主体向http://server/controller/pages-3发送 PUT 命令会发生什么?根据您希望 API 的工作方式,您可能应该向我发送错误的请求响应或类似的内容。

于 2012-02-29T00:15:11.920 回答
0

有什么理由不在您的参数中明确说明吗?我会定义一个 UpdateModel 并将其作为参数而不是动态的。然后它也将能够对验证进行建模。

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

于 2013-03-19T13:14:50.573 回答