FromBody不能绑定string参数

我有一个问题类似于ASP.NET MVC 4 RC Web API参数绑定问题 ,但我试图通过使用[FromBody]属性来解决它。

提琴手报告下面的请求(不包括像用户代理string不相关的位)

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 } 

我可以将这个参数包装成一个复杂的types,但是这似乎是一个解决问题的方法。 或者我可以把查询放在URI中,但是这不符合API其余部分的模式。 可以这样做吗? 如果是这样,我的错误在哪里?

改变你的要求

 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 

注意缺less“查询”

如果您使用的是AngularJS而不是jQuery,则可能需要select以下替代方法,因为AngularJS默认使用内容typesapplication/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' 

请注意,该值被包装在string引号(单或双)中。