Как передать полезную нагрузку тела в угловой вызов DELETE $ resource

У меня есть стандартный ресурс angular $, настроенный как таковой

angular.module('client.resources')

.factory('ProjectSubjectResource',['$resource',
    function ($resource) {
            release: {
                method: 'DELETE',
                isArray: false
            }
        });
    }]);

и я называю этот метод как

ProjectSubjectResource.release({projectId: projectId, subjectId: 0},{ subjectIds: subjectIdArray})

где subjectIdArray - массив объектов:

[{subject1: 213123}, {subject2: 3131}]

Однако тело запроса не содержит этого массива. Я подозреваю, что проблема в запросе DELETE, поскольку вызов метода переименования, например, PUT имеет значение.

Могу ли я как-то разрешить тело запроса DELETE?


person Askar Ibragimov    schedule 12.05.2014    source источник
comment
Глядя на github на $ resource, у него есть var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method); похоже, что Angular намеренно не включает тело в DELETE запросы ... Что касается работы с ним, я не знаю :(   -  person RobH    schedule 12.05.2014


Ответы (2)


Начиная с Angular 1.6 .4 была добавлена ​​конфигурация действия hasBody.

Теперь у вас может быть:

deleteSomething: {
    method: 'DELETE',
    hasBody: true
}

hasBody - {boolean} - позволяет указать, нужно ли включать тело запроса или нет. Если не указано иное, только запросы POST, PUT и PATCH будут иметь тело.

Справочная информация

person Denis C de Azevedo    schedule 19.04.2017

Взгляните на этот ответ.

Тело запроса на DELETE игнорируется. Вам нужно будет использовать POST, чтобы делать то, что вы хотите, или описывать данные, которые вы отправляете, с помощью URL-адреса.

ОБНОВЛЕНИЕ: DELETE запросы могут иметь тело, начиная с Angular 1.6.4; дополнительную информацию можно найти в ответе denisazevedo.

person link    schedule 12.05.2014