尝试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。该怎么办?
答案 0 :(得分:0)
首先,“ FromBody”是指来自HTTP请求正文的信息。基本上,接收到的请求的主体被获取并转换为对象(默认情况下通过反序列化JSON)。 MVC.NET将占据整个主体并创建一个对象。这就是为什么不能有两个[FromBody]
的原因。
基于jQuery,您要执行的操作是传递{ cars: carsData, companies: compData }
和{ cars: carsData, company: "theCompany" }
,这两个对象均作为主体发送。这些对象分别具有两个属性(cars
和companies
)和(cars
和company
)。由于将这些对象作为整体传递给主体,因此MVC也需要将主体反序列化为整个字符串。
您将必须上一堂新课:
class MyCarData {
public List<car> cars { get; set; }
public List<company> companies { get; set; }
}
然后您可以在控制器中使用[FromBody] MyCarData
来整体访问它。