Angular JS 将带有 $resource 的数组数据发送到 .NET API
Angular JS Sending Array data with $resource to .NET API
是的,我知道有大量关于使用 angular $esource 发送数组数据的帖子。我阅读了 this, this,几乎是关于该主题的前 10 google 个结果,但我仍然无法让它发挥作用。我怀疑这可能与服务器端有关API,但我真的不确定。
请帮我解决这个问题。我正在尝试使用 angular $resource POST 一个数据数组到 .NET API。
$资源:
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 参数为空。
当我浏览有关此主题的 Whosebug 帖子时,我主要看到正在使用以下语法:
var resource = new PartProgramsResource();
resource.$add({ partId: $scope.part.id }, programsToSave);
但是,这对我不起作用,请求有效负载将是一个空对象。
任何帮助将不胜感激,因为我绝对非常卡住....
你直接把programNames作为数据对象,但应该是数据对象的属性:
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: [...]} 这样的数据就没问题了。
是的,我知道有大量关于使用 angular $esource 发送数组数据的帖子。我阅读了 this, this,几乎是关于该主题的前 10 google 个结果,但我仍然无法让它发挥作用。我怀疑这可能与服务器端有关API,但我真的不确定。
请帮我解决这个问题。我正在尝试使用 angular $resource POST 一个数据数组到 .NET API。
$资源:
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 参数为空。
当我浏览有关此主题的 Whosebug 帖子时,我主要看到正在使用以下语法:
var resource = new PartProgramsResource();
resource.$add({ partId: $scope.part.id }, programsToSave);
但是,这对我不起作用,请求有效负载将是一个空对象。
任何帮助将不胜感激,因为我绝对非常卡住....
你直接把programNames作为数据对象,但应该是数据对象的属性:
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: [...]} 这样的数据就没问题了。