C#ASP.NET Web API 2接受来自AngularJS的inparameter中的int数组

时间:2016-11-18 14:51:12

标签: c# asp.net angularjs arrays

我有以下代码。为什么我不能直接将数组或列表作为参数?它可以在下面的类中使用数组或列表工作正常。

请求有效负载:

{"ids":[1,2,4]}

角:

send: {
    method: 'POST',
    url: controllerPath + '/send',
    isArray: true
}

agreementResource.send({ ids: vm.agreementIds }).$promise.then(function (data) {

});

C#:

//Works
[HttpPost]
[Route("send")]
[Authorize(Roles = "Admin")]
public IHttpActionResult Send(AgreementIdsViewModel ids)
{
    foreach (var id in ids.Ids)
    {

    }
}


//Does not work
[HttpPost]
[Route("send")]
[Authorize(Roles = "Admin")]
public IHttpActionResult Send(int[] ids)
{
    foreach (var id in ids)
    {

    }
}

public class AgreementIdsViewModel
{
    public int[] Ids { get; set; }
}

我知道可以通过GET请求完成,所以我认为应该可以。

GetSend([FromUri] int[] ids)

并发送请求:

/Send?ids=1&ids=2&ids=3 

1 个答案:

答案 0 :(得分:0)

请遵循以下内容:

角度服务:

send: {
    method: 'POST',
    url: controllerPath + '/send',
   }

您的有效负载中存在一个大问题。它应该如下所示:

[1,2,3,4]

不添加ID。如果你想这样做,你可以使用lodash或下划线,如下所示:

 var ids = [];

 _.map(file, function (item, index) {
                ids.push(item.name);
            });

您的网站Api没有任何问题,这是正确的:

[HttpPost]
[Route("send")]
[Authorize(Roles = "Admin")]
public IHttpActionResult Send(int[] ids)
{
    foreach (var id in ids)
    {

    }
}

您将调用服务的角度控制器如下所示:

agreementResource.send({ ids }).$promise.then(function (data) {}

告诉我它是否适合您。