Ответ 1
Это было довольно давно, так как я задал этот вопрос. Теперь я понимаю это более четко, я собираюсь дать более полный ответ, чтобы помочь другим.
В Web API очень просто запомнить, как происходит привязка параметров.
- если вы
POST
простые типы, веб-API пытается связать его с URL-адресом -
если вы
POST
сложный тип, веб-API пытается связать его с телом запрос (используется форматерmedia-type
). -
Если вы хотите связать сложный тип с URL-адресом, вы будете использовать
[FromUri]
в своем действии. Ограничение этого зависит от того, как долго будут ваши данные и если он превысит лимит символов URL.public IHttpActionResult Put([FromUri] ViewModel data) { ... }
-
Если вы хотите связать простой тип с телом запроса, вы будете использовать [FromBody] в своем действии.
public IHttpActionResult Put([FromBody] string name) { ... }
как побочная заметка, скажем, вы делаете запрос PUT
(просто строку), чтобы что-то обновить. Если вы решите не добавлять его к URL-адресу и передавать как сложный тип с одним свойством в модели, то параметр data
в jQuery ajax будет выглядеть примерно так. Объект, который вы передаете параметру данных, имеет только одно свойство с пустым именем свойства.
var myName = 'ABC';
$.ajax({url:.., data: {'': myName}});
и ваше действие api в Интернете будет выглядеть примерно так.
public IHttpActionResult Put([FromBody] string name){ ... }
Эта страница asp.net объясняет все это. http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api