我有以下代码:
[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();
}
它运作得很好。
我在这里做错了什么?
答案 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 });