WEB API - FromBody参数不起作用

时间:2016-07-26 20:34:50

标签: asp.net asp.net-mvc asp.net-web-api

我的body参数始终为null。 这是控制器:

    [HttpPost]
    public async void Assign([FromUri] int[] sectionIds, [FromBody] int[] ids) ...

填写URI参数。但是,Body参数始终为空。

这是ajax请求:

    return $.ajax(
        {
            url: api_url,
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({
                "ids": ids
            })
        })

这是我在网络监视器中的有效负载中看到的内容。

    {"ids":[597,1893]}:

这里可能出现什么问题?

编辑:我正在使用API​​控制器

3 个答案:

答案 0 :(得分:3)

似乎网址不正确。您可以使用 contentType

尝试以下操作
$.ajax({
   url: API_URL,
   contentType: "application/json",
   method: "POST",
   data: JSON.stringify({"ids": ids}, 
   success: function(result) { return result; }
});

答案 1 :(得分:0)

我放弃了使用简单的类型。什么都没有用,我浪费了很多时间。

我尝试了与此类似的解决方案: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
                })
        })

答案 2 :(得分:0)

您的正文必须是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]
})