------------------------- EDIT --------------------- -----------
它并非重复,因为我无法按照this问题的要求使用ajax请求。
我在javascript中创建一个表单来调用c#WebApi,它将返回一个xls文件(这就是我创建表单而不是ajax调用的原因)。 webApi必须接收一个整数数组,该数组将对应于一组对象ID。 webApi是以下
[Route("getExcel")]
[HttpPost]
public HttpResponseMessage getExcel([FromBody]int[] ids)
{
...
}
我建造的表格是这样的:
var form = document.createElement("form");
form.setAttribute('method', "post");
setAttribute('action', baseUrl + "api/processos/getExcel");
form.setAttribute('target', "_blank");
var rows = $("#tbl").dataTable().fnGetNodes();
var arr = [];
for (var i = 0; i < rows.length; i++)
{
ids = $("#tbl").dataTable().fnGetData(i).processosId;
var input = document.createElement("input");
input.setAttribute('type', "text");
input.setAttribute('name', "ids[]");
input.setAttribute('value', ids);
form.appendChild(input);
}
document.body.appendChild(form);
form.submit();
WebApi上的ids
为空(但不为空)...在Fiddler上观看时,原始视图显示了这个ids=15&ids=14&ids=13&ids=12&ids=11
,这正是我需要的......
为什么不与WebApi ID联系?如果我在网址中发送了这些确切的值(并将[FromBody]
更改为[FromUri]
就可以了......
------------------- EDIT --------------------------- ---
这是调用方法时WebApi上数组ids
中的内容:
ids {int[0]}
(在调试时看到)
答案 0 :(得分:0)
因此,解决方案是在后端创建一个模型:
public class ExcelIds
{
public int[] ids { get; set; }
}
并将控制器更改为:
[Route("getExcel")]
[HttpPost]
public HttpResponseMessage getExcel([FromBody]ExcelIds model)
{
//code here
}
答案 1 :(得分:0)
您可以使用FormDataCollection.GetValues(string Key)
来获取字符串数组,以后可以转换为int []。
[Route("getExcel")]
[HttpPost]
public HttpResponseMessage getExcel(FormDataCollection data)
{
string[] ids = data.GetValues("ids");
...
}