ASP.Net MVC Api不接受int参数

时间:2014-04-17 21:32:36

标签: api asp.net-mvc-4 converter

我有以下代码:

[HttpPost]
public async Task<ReturnStatus> Delete([FromBody]int id)
{
    await new BusinessLogic.Templates().DeleteTemplate(id);

    return ReturnStatus.ReturnStatusSuccess();
}

当我将此作为AJAX请求运行时,id为null。我检查了通过Fiddler传入的数据,正文是:

{"id":"11"}

标题包含Content-Type:application / json;字符集= UTF-8。

如果我稍微修改代码

[HttpPost]
public async Task<ReturnStatus> Delete([FromBody]string id)
{
    await new BusinessLogic.Templates().DeleteTemplate(Convert.ToInt64(id));

    return ReturnStatus.ReturnStatusSuccess();
}

它运作得很好。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

请特别阅读本部分,第3部分: http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/ 3. [FromBody]参数必须编码为= value (引用该部分以供将来参考:)

有两种方法可以使jQuery满足Web API的编码要求。首先,您可以在值前面对=进行硬编码,如下所示:

$.post('api/values', "=" + value);

就个人而言,我不是那种方法的粉丝。除了看起来很简单的kludgy之外,使用JavaScript的类型强制执行快速和松散是找到自己调试“wat”情况的好方法。 相反,您可以使用以下语法利用jQuery如何将对象参数编码为$.ajax

$.post('api/values', { '': value });