FromBody没有绑定字符串参数

时间:2012-07-17 02:40:34

标签: c# .net asp.net-web-api

我遇到与ASP.NET MVC 4 RC Web API Parameter 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其余部分的模式。有可能这样做吗?如果是的话,我的错误在哪里?

2 个答案:

答案 0 :(得分:45)

将您的请求更改为

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

注意缺少“查询”

答案 1 :(得分:23)

如果你使用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'

请注意,该值包含在字符串引号中(单引号或双引号)。