Web API, API Controller и как обновить модель? - PullRequest
1 голос
/ 28 февраля 2012

Я испытываю API-контроллер в MVC 4 и у меня есть вопрос о наилучшей практике при использовании put, обновлении объекта.

Я использую RavenDB в качестве хранилища данных, и я создал собственный MediaTypeFormatter, который имеет преобразователь типа JsonDynamicConverter, который может сериализовать и десериализовать json в динамический объект. С учетом вышесказанного, мой метод Put для контроллеров API выглядит следующим образом

 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, поэтому мой вопрос, каков наилучший / предпочтительный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 19 марта 2013

Есть ли какая-то причина, по которой вы не можете быть явно указаны в ваших параметрах? Я бы определил UpdateModel и взял бы это как параметр вместо динамического. Тогда он также сможет моделировать валидацию.

ASP.NET WebApi включает обработку преобразования из JSON и XML в качестве входных данных для ваших методов контроллера. Я предполагаю, что ваша комбинация пользовательского mediatypeformatter и динамического использования была бы ненужной в этом случае, если бы я не пропустил что-то.

0 голосов
/ 29 февраля 2012

Просто вызовите RavenDB, чтобы загрузить объект с соответствующим идентификатором, внести изменения в его содержимое и снова сохранить его.

Не нужно беспокоиться о вызовах UpdateModel.Здесь это не применимо.

Помните об одной потенциальной проблеме, поскольку вы включаете идентификатор в модель.Если бы я отправил команду PUT на http://server/controller/pages-3 с этим телом, что бы произошло?Возможно, вам следует отправить мне неверный ответ на запрос или что-то подобное в зависимости от того, как вы хотите, чтобы ваш API работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...