如何在WebAPI控制器中接收多个JSON对象和一个Uri参数

时间:2018-09-07 17:53:43

标签: json asp.net-mvc asp.net-web-api2

尝试ASP.NET Web API2时遇到以下情况。我有一个WebAPI2控制器:

[HttpPost]
[Route("api/service/receiver/{date}")]
public IHttpActionResult receiver([FromUri]  string date, [FromBody List<car> cars)

}

现在我可以使用以下jQuery来调用它:

<script>
    var carsData = [{ "model": "Audi" }, { "model": "BMW" }, { "model": "Audi" }];

    var uri = 'api/service/receiver/20180107';

    $.ajax({
        type: "POST",
        url: uri,
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(carsData),
        dataType: "json",
        success: function (data) {
            alert(data);
        },
        failure: function (errMsg) {
            alert(errMsg);
        }
    });
</script>

这很好,但是我不知道如何发布多个复杂的对象,或者发布复杂的JSON对象和多个其他参数。

我尝试过:

[HttpPost]
[Route("api/service/receiver/{date}")]
public IHttpActionResult receiver([FromUri]  string date, [FromBody List<car> cars, [FromBody] List<company> companies)

}

还有

[HttpPost]
[Route("api/service/receiver/{date}")]
public IHttpActionResult receiver([FromUri]  string date, [FromBody List<car> cars, string company)

}

然后在jQuery Call中,我更改了data

data: JSON.stringify({ cars: carsData, companies: compData }),

以及

data: JSON.stringify({ cars: carsData, company: "theCompany" }),

但是随后我收到404或null。该怎么办?

1 个答案:

答案 0 :(得分:0)

首先,“ FromBody”是指来自HTTP请求正文的信息。基本上,接收到的请求的主体被获取并转换为对象(默认情况下通过反序列化JSON)。 MVC.NET将占据整个主体并创建一个对象。这就是为什么不能有两个[FromBody]的原因。

基于jQuery,您要执行的操作是传递{ cars: carsData, companies: compData }{ cars: carsData, company: "theCompany" },这两个对象均作为主体发送。这些对象分别具有两个属性(carscompanies)和(carscompany)。由于将这些对象作为整体传递给主体,因此MVC也需要将主体反序列化为整个字符串。

您将必须上一堂新课:

class MyCarData {
    public List<car> cars { get; set; }
    public List<company> companies { get; set; }
}

然后您可以在控制器中使用[FromBody] MyCarData来整体访问它。