如何使用角度中的$ resource将json对象传递给WebApi作为GET?
我的服务:
pmsService.factory('Widgets', ['$resource', function ($resource) {
var data = $resource('/api/:path/:id', {
path: '@path'
}, {
getWidgets: {
params: { path: 'widgets' },
method: "GET",
isArray: true
},
getWidget: {
params: { path: 'widgets' },
method: "GET",
isArray: false
},
getWidgetData: {
params: { path: 'widgets' },
method: "POST"
},
});
return data;
在角度控制器中:
Widgets.getWidgetData({ id: $scope.widget.id}, $scope.paramValues ).$promise.then(function (data) {
$scope.widget.Data = data;
$log.debug($scope.widget.Data);
});
在控制器中:
[Route("api/widgets/{id}")]
[HttpPost]
public Object Get(int id, dynamic prms)
{
....
}
这应该向WebApi Controller,id和Widget的参数列表发送2个参数。提琴手表示:
/ API /部件/ 31 /%5Bobject%20Object%5D
所以路由工作正常,但我收到的对象prms是空的。
答案 0 :(得分:1)
我真的不明白你要做什么但是
如果您正在尝试使用/api/widgets/31?foo=bar
中的url参数,那么我就是这样做的。
angular
.module('myMod', ['$resource'])
.factory('Widgets',
['$resource', function ($resource) {
return $resource(
'/api/:path/:id/',
{'path': '@path'},
{
getWidgets: {
params: {path: 'widgets'},
method: "GET",
isArray: true
},
getWidget: {
params: {path: 'widgets'},
method: "GET",
isArray: false
},
getWidgetData: {
params: {path: 'widgets'},
method: "GET",
isArray: false
}
})
}])
.controller('WidgetsController',
['$scope', 'Widgets', function ($scope, Widgets) {
$scope.widget = Widgets.getWidget({
id: 1,
foo: 'bar'
});
}]);
这会向/api/widgets/1?foo=bar
发出GET请求。您可以包含嵌套对象或这样的数组,它将被序列化并附加到URL
// In controller
.controller('WidgetsController',
['$scope', 'Widgets', function ($scope, Widgets) {
$scope.widget = Widgets.getWidget({
id: 1,
fields: ['name', 'price']
});
}]);
这会向/api/widgets/1?fields=name&fields=price
发出GET请求。
我通常更喜欢使用$httpParamSerializerJQLike
序列化程序来序列化此格式/api/widgets/1?fields[]=name&fields[]=price
的参数,根据我的经验,这些参数问题较少。要使用此序列化程序,您需要像这样配置$http
angular
.module('myMod')
.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.paramSerializer = '$httpParamSerializerJQLike';
}])
希望有所帮助