Подтвердить что ты не робот

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. Можно ли это сделать так? Если да, то где моя ошибка?

4b9b3361

Ответ 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'

Обратите внимание, что значение обернуто в строковые кавычки (одно или два).