Angular JS使用$resource将数组数据发送到.NET API
是的,我知道有无数关于使用angular$esource发送阵列数据的帖子。我读了很多关于这个话题的谷歌前十名的搜索结果,但我仍然无法让它发挥作用。我怀疑这可能与服务器端API有关,但我真的不确定 请帮我弄清楚。我正在尝试使用angular$resource将数据数组发布到.NETAPI $resource: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
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
}
});
})