Angular JS使用$resource将数组数据发送到.NET API

Angular JS使用$resource将数组数据发送到.NET API,.net,angularjs,api,angular-resource,.net,Angularjs,Api,Angular Resource,是的,我知道有无数关于使用angular$esource发送阵列数据的帖子。我读了很多关于这个话题的谷歌前十名的搜索结果,但我仍然无法让它发挥作用。我怀疑这可能与服务器端API有关,但我真的不确定 请帮我弄清楚。我正在尝试使用angular$resource将数据数组发布到.NETAPI $resource: ResourceModule.service('PartProgramsResource', function ($resource) { var url = _baseUrl

是的,我知道有无数关于使用angular$esource发送阵列数据的帖子。我读了很多关于这个话题的谷歌前十名的搜索结果,但我仍然无法让它发挥作用。我怀疑这可能与服务器端API有关,但我真的不确定

请帮我弄清楚。我正在尝试使用angular$resource将数据数组发布到.NETAPI

$resource:

ResourceModule.service('PartProgramsResource', function ($resource) {
     var url = _baseUrl + '/parts/:partId/programs'
     return $resource(url, { partId: '@partId' }, {
         add: {method: 'POST', isArray: true}
     });
})

内部控制器:

app.controller("EditPartCtrl", function ($scope, PartProgramsResource){
   $scope.save = function(){
      var programsToSave = ["program 1", "program2"];
      var resource = new PartProgramsResource(programsToSave);
      resource.$add({ partId: $scope.part.id });
  }
}
调试器:

我希望我没有弄错,但在我看来,我的数组变成了一个对象??使用数组索引作为键?或者这就是数组在请求负载中的样子

.NET API:

 [HttpPost]
    [Route("{partId:int:min(1)}/programs"
        , Name = ApplicationApiRoutes.Parts.AddPartPrograms)]
    [ResponseType(typeof(IEnumerable<KeyValueOutput>))]
    public HttpResponseMessage AddPartPrograms([FromUri] int partId, [FromBody] List<string> programNames)
    {
        return Execute(() => _partFacade.AddPartPrograms(partId, programNames.ToArray(), CurrentUser));
    }
但是,这对我来说永远不起作用,请求负载将是一个空对象


任何帮助都将不胜感激,因为我完全被卡住了……

您直接将程序名作为数据对象输入,但它应该是数据对象的属性:

var resource = new PartProgramsResource(),
    data = {
        programNames: programsToSave
    };

resource.$add({ partId: $scope.part.id }, data);

您可以使用transformRequest修改数据

ResourceModule.service('PartProgramsResource', function ($resource) {
    var url = _baseUrl + '/parts/:partId/programs'
    return $resource(url, { partId: '@partId' }, {
        add: {
            method: 'POST',
            transformRequest: function (data, headersGetter) {
                //modify data and return it 
                return angular.toJson(data);
            },
            isArray: true
        }
    });
})

我不能100%确定angular为什么会这样做,但我认为它希望传递对象。因此,如果您发送了类似{myArray:[…]}的数据,这就可以了。

关于
resource.$add({partId:$scope.part.id,programNames:programsToSave})也许您可以尝试使用transformRequest并在其中修改发送到服务器的数据。@devqon,这会将我的uri更改为,但仍然会得到空引用错误。但是谢谢你的建议。那
resource.$add({partId:$scope.part.id},{programmannames:programsToSave})怎么样@AlexG,天哪!最后你是个救生员!这将是伟大的,如果你可以张贴你的评论作为一个答案,所以我可以选择你作为解决方案。如果你能解释为什么我的数组在请求过程中被转换成一个对象,这也会很有帮助。我明白了。我猜你原来的评论有错。这种方法不太管用。请求负载是一个空对象。是的,这正是我所做的。并不是说我不喜欢你的答案,但我仍然对这个解决方案有点怀疑,因为这么多人建议添加isArray:true是关键的解决方案,但这对我不起作用。另外,我仍然不明白为什么使用资源。$add({},dataToPost);实际上没有向服务器发布任何数据,我必须按照我的方式来做——var r=new Resource(dataToPost);r、 $add();
ResourceModule.service('PartProgramsResource', function ($resource) {
    var url = _baseUrl + '/parts/:partId/programs'
    return $resource(url, { partId: '@partId' }, {
        add: {
            method: 'POST',
            transformRequest: function (data, headersGetter) {
                //modify data and return it 
                return angular.toJson(data);
            },
            isArray: true
        }
    });
})