是的,我知道有很多关于使用angular $ esource发送数组数据的帖子。我阅读了this,this,以及这个主题的十大谷歌搜索结果,但我仍然无法使其发挥作用。我怀疑它可能与服务器端API有关,但我真的不确定。
请帮我解决这个问题。我正在尝试使用angular $ resource将一组数据发布到.NET API。
$ Resouce:
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));
}
使用上述资源调用API将导致System.NullReferenceException错误。 programNames参数为null。
当我浏览有关此主题的stackoverflow帖子时,我大多看到使用的语法:
var resource = new PartProgramsResource();
resource.$add({ partId: $scope.part.id }, programsToSave);
然而,这对我来说永远不会有效,请求有效负载将是一个空对象。
任何帮助都将受到赞赏,因为我绝对是非常困难....
答案 0 :(得分:2)
您可以使用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%确定为什么角度会这样做,但我认为它希望对象被传递。所以,如果您发送了像{myArray:[...]}这样的数据,那就没问题了。
答案 1 :(得分:0)
您直接将programNames作为数据对象放入,但它应该是数据对象的属性:
var resource = new PartProgramsResource(),
data = {
programNames: programsToSave
};
resource.$add({ partId: $scope.part.id }, data);