IEnumerable数组始终为null ... WebAPI

时间:2015-05-13 15:52:03

标签: c# ajax asp.net-web-api

我正在构建一个逗号分隔的字符串,并将其传递给我的WebAPI方法,如下所示:

var projectids="";
                    for (var i = 0; i < chk.length; i++) {
                        projectids += chk[i].VMIProjectId + ",";
                    }
                   //projectids = "1,2,3"
                    $.ajax({
                        type: 'POST',
                        url: "http://localhost:52555/device/6/AddProjectsToDevice",
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        data: JSON.stringify(projectids),
                        success: function (msg) {
                        },
                        error: function (data) {
                            debugger;
                        }
                    });

我已成功到达WebApi方法,但我的IEnumerable数组projectIds始终为null。这是方法:

 [HttpPost]
   [Route("device/{deviceId}/AddProjectsToDevice")]
   public IEnumerable<VMI_DeviceLinkedProject> AddProjectsToDevice([FromUri]long deviceId,[FromBody] IEnumerable<long> projectIds){}

如何将逗号分隔的ID列表传递给我的WebAPI方法?感谢您的阅读

2 个答案:

答案 0 :(得分:3)

现在你的控制器动作是获取逗号分隔的数字字符串而不是JSON数组("[1,2,3,4]"),这就是模型绑定器不起作用的原因:

var projectids = [];
for (var i = 0; i < chk.length; i++) {
    projectids.push(chk[i].VMIProjectId);
}

然后,字符串化数组应该正确绑定到IEnumerable<long>

答案 1 :(得分:1)

您可以使用与下面相同的代码将其作为数组传递,而不是将其作为csv值传递,

var projectIdList =[];

for (var i = 0; i < chk.length; i++) {
   projectIdList.push(chk[i].VMIProjectId);
}

同样将api方法中的参数名称更改为projectIdList并传递它。

相关问题