Angular在请求正文中发送ID而不是URL

时间:2015-08-03 07:07:40

标签: angularjs rest http crud

这是一个资源定义:

app.factory('Program', ['$resource', function ($resource) {
        return $resource(host + '/rest/program/:id/:action', {}, {query: {method: 'get', isArray: false}});
    }]);

当我致电Program.save({id:3,name:'foo'});时,它会向POST /rest/program发送请求,并将{id:3,name:'foo'}放入请求正文中。不应该将更新请求发送到/rest/program/3,并且只将{name:'foo'}放入请求正文中。

2 个答案:

答案 0 :(得分:1)

https://docs.angularjs.org/api/ngResource/service/$resource

  

类对象或实例对象上的操作方法可以是   使用以下参数调用:

HTTP GET "class" actions: Resource.action([parameters], [success], [error])
non-GET "class" actions: Resource.action([parameters], postData, [success], [error])
non-GET instance actions: instance.$action([parameters], [success], [error])

由于您正在使用非GET操作并且只传入一个参数,因此它假定它是postData并且未提供可选参数参数。

使用:

Program.save({id:3}, {id:3, name:'foo'});

答案 1 :(得分:1)

试试这个:

app.factory('Program', ['$resource', function ($resource) {
    return $resource(host + '/rest/program/:id/:action', {
        id: '@id',
        action: '@action'
    }, {
        query: {
            method: 'get',
            isArray: false
        }
    });
}]);

您可能还需要将它们作为参数传递。