我的身体参数总是为null,这是一个问题。这是控制器:
[HttpPost]
public async void Assign([FromUri] int[] sectionIds, [FromBody] int[] ids) ...
已填写URI参数。但是,"实体"参数始终为空。
这是ajax请求:
return $.ajax(
{
url: api_url,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
"ids": ids
})
})
以下是我在网络监视器上的有效负载中看到的内容。
{"ids":[597,1893]}:
这里可能有什么问题?
编辑:我正在使用API控制器
URL似乎不在正确的位置。您能用contentType尝试以下操作吗?
$.ajax({
url: API_URL,
contentType: "application/json",
method: "POST",
data: JSON.stringify({"ids": ids},
success: function(result) { return result; }
});
我放弃了使用简单类型。什么都没用,我在这上面浪费了很多时间。
我尝试了与此类似的解决方案:http://blog.codenamed.nl/2015/05/12/why-your-frombody-parameter-is-always-null/
但它不适用于数组,数组只有1个值0。因此,作为一种变通方法,我创建了一个复杂的类型,并将我的2个参数封装在其中
// Controller code
[HttpPost]
public async void Assign([FromBody] AssignModel) ...
客户端代码
// Client code
return $.ajax(
{
url: api_url,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
"Ids": ids,
"SectionIds": sectionIds
})
})
您的主体必须是json的值,而不是带有参数名称和值的json。在您的情况下,它必须是:
POST http://localhost:5076/api/values HTTP/1.1
User-Agent: Fiddler
Host: localhost:5076
Content-Type: application/json
Content-Length: 7
[1,2]
在javascript中,类似于:
return $.ajax(
{
url: api_url,
type: 'POST',
contentType: 'application/json',
data: [1,2]
})