FromBody не привязывает строковый параметр
У меня проблема, похожая на ASP.NET MVC 4 RC Web API Параметр Binding Issue, но я пытаюсь решить ее с помощью атрибута [FromBody].
Fiddler сообщает следующий запрос (за исключением ненужных битов, таких как строка агента пользователя)
PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1
Host: localhost:82
Connection: keep-alive
Content-Length: 11
Origin: http://localhost:3000
Content-Type: application/x-www-form-urlencoded
Accept: application/json, text/javascript, */*; q=0.01
query=apple
Мое действие контроллера
[HttpPut]
public ShoppingListItemWebModel CreateShoppingListItem([FromBody]string query) {
// query is null
}
Я мог бы обернуть параметр сложным типом, но это похоже на взломать проблему. Или я мог бы поместить запрос в URI, но это не соответствует шаблону остальной части API. Можно ли это сделать так? Если да, то где моя ошибка?
Ответы
Ответ 1
измените ваш запрос на
PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1
Host: localhost:82
Connection: keep-alive
Content-Length: 11
Origin: http://localhost:3000
Content-Type: application/x-www-form-urlencoded
Accept: application/json, text/javascript, */*; q=0.01
=apple
обратите внимание на отсутствие "запроса"
Ответ 2
Если вы используете AngularJS вместо jQuery, вы можете выбрать следующую альтернативу, так как AngularJS по умолчанию использует тип контента application/json
.
PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1
Host: localhost:82
Connection: keep-alive
Content-Length: 7
Origin: http://localhost:3000
Content-Type: application/json
Accept: application/json, text/javascript, */*; q=0.01
'apple'
Обратите внимание, что значение обернуто в строковые кавычки (одно или два).