Как добавить тело в функцию удаления Angular HttpClient

Наш проект переходит на Angular4 и использует @angular/common/http Httpclient в качестве сетевого инструмента по умолчанию. Но я обнаружил, что в функции удаления нет параметров body. Как добавить тело для удаления функции? Спасибо.


person Hongyang Du    schedule 05.09.2017    source источник
comment
Возможный дубликат тела запроса Http.DELETE в Angular2   -  person Sumit Agarwal    schedule 05.09.2017
comment
он спрашивает о новом HttpClient, а не о старом http-модуле   -  person Rahul Singh    schedule 05.09.2017
comment
но реализация, которую он ищет, остается одинаковой для обоих случаев, попробуйте перейти по общей ссылке.   -  person Sumit Agarwal    schedule 05.09.2017
comment
Взгляните на это: https://angular.io/api/http/RequestOptions   -  person Jamie Rees    schedule 05.09.2017
comment
Я не могу найти библиотеку RequestOptions-Like в common/http. И параметры в HttpClient.delete просто поддерживают: заголовки, наблюдения, параметры (не тело), ​​отчет о ходе выполнения, тип ответа, с учетными данными   -  person Hongyang Du    schedule 05.09.2017
comment
@SumitAgarwal Спасибо, Агарвал~ Но перегруженный метод просто имеет изменения в responseType и типе наблюдения. Там все еще нет места для тела.   -  person Hongyang Du    schedule 05.09.2017
comment
для будущих читателей - начиная с Angular 4.3 (включая Angular 5+) они удалили тело из метода удаления углового HttpClient, альтернативой является использование http.request(), как Андрей Иванык, опубликованный ниже. он был удален, потому что спецификация Delete неясна в отношении использования в нем BODY.   -  person Stavm    schedule 08.02.2018


Ответы (4)


Вместо этого вы можете использовать универсальный метод request в классе HttpClient. Этот метод имеет тело в опциях. https://angular.io/api/common/http/HttpClient#members

например, this.http.request('delete', 'url', { body: ... })

person Andrii Ivanyk    schedule 20.09.2017
comment
@StefanFalk, вероятно, потому, что правильный способ удаления материала с помощью RESTful - это иметь уникальный URL-адрес для каждого уникального ресурса (например: /clients/<id>). Но, к сожалению, реальные API редко бывают RESTful. - person Joseph Tinoco; 06.12.2018
comment
@JosephTinoco Нет, я просто имею в виду сам звонок. Легко может быть метод this.http.delete(), который обертывает это s.t. интерфейс становится более интуитивным. - person Stefan Falk; 07.12.2018
comment
@StefanFalk Это моя точка зрения. Все интуитивные интерфейсы RESTful, все остальное возможно, но только с уродливым/менее интуитивным методом this.http.request(). Как будто Angular говорит, что если вам нужен красивый, читаемый код, вы должны использовать RESTful в бэкенде. - person Joseph Tinoco; 07.12.2018
comment
В Angular 9+ вам нужно будет this.http.request('DELETE', 'url', { body: ... }). В моем случае была необходима строка метода в верхнем регистре. - person Michael Czechowski; 03.09.2020

const httpOptions = {
    headers: new HttpHeaders({ 'Content-Type': 'application/json' }), body: your body data
};


return new Promise(resolve => {
    this.httpClient.delete(URL, httpOptions)       
                   .subscribe(res => {     
                       resolve(res);
                   }, err => {               
                       resolve(err);
                   });
    });

используя httpOptions, вы можете установить в нем заголовок и тело. пожалуйста, обратитесь к этому https://angular.io/tutorial/toh-pt6#delete-a-hero

person Nasreen Ustad    schedule 10.04.2018
comment
Не уверен, какую версию Angular вы используете, но это не работает в Angular 5 с использованием HttpClient. Файл типов указывает, что тело не существует. Вам нужно использовать this.http.request - stackoverflow.com/a/46316857/1148107 - person mtpultz; 10.08.2018

У меня также возникает эта проблема, и мое решение заключается в создании нового метода HttpRequest удаления, затем клонировании этого запроса, сбросе его тела с вашими данными.

let req = new HttpRequest('DELETE', 'url');
let newReq = req.clone({body: [10]});
this.http.request(newReq).subscribe((res) => {
    console.log(res);
}, (err) => {
    console.log(err);
});

clone() требуется, потому что тело по-прежнему нельзя напрямую установить в new HttpRequest().

person Yitim    schedule 15.09.2017
comment
Действительно, создание HttpRequest с методом delete и прямой передачей тела в конструкторе не работает. Тем не менее, он отлично работает с методом post - person seza443; 28.12.2017

person    schedule
comment
Этот вопрос уже содержит несколько ответов. Можете ли вы объяснить (отредактировав свой ответ), чем ваш ответ отличается от других ответов? Также знайте, что ответы только для кода бесполезны в долгосрочной перспективе. - person 7uc1f3r; 18.01.2021
comment
Я думаю, что этот код добавляет параметр; не содержание тела как запросы OP. - person steve; 14.06.2021