Как передать тело через `httpclient` запрос на удаление в Angular5

Как передать тело через httpClient в запросе на удаление?

Пожалуйста, проверьте мой код. Есть ли идея передать данные через тело в запросе на удаление. Нет правильного источника, как назвать этот запрос на угловом 5.

let body = removeFile;
    return this.httpClient.delete(`${apiRoot}RemoveQueryData`, {
      headers: new HttpHeaders().set('Content-Type', 'application/json').set('Authorization', `Bearer ${accessToken}`),
      observe: removeFile
    })

Это тело, через которое я прохожу, наблюдает. Выкидывает следующую ошибку.

Ошибка:

Error: Unreachable: unhandled observe type [object Object]}
    at HttpClient.request (http.js:1520)
    at HttpClient.delete (http.js:1546)

3 ответа

Вы должны сделать некоторые исследования и прочитать некоторые документы, прежде чем задавать вопросы здесь. Потому что вы получите много ресурсов, доступных в Интернете

let body = removeFile;
let queryParams = new HttpParams().set('key', value); // key and value are both strings
let headerData = new HttpHeaders().set('Content-Type', 'application/json').set('Authorization', `Bearer ${accessToken}`);

return this.httpClient.delete(`${apiRoot}RemoveQueryData`, 

    new RequestOptions( {
      headers: headerData,  // optional
      params: queryParams,  // optional
      body: body,
      observe: 'response',  // optional
      responseType: 'response' // default type json ...
    })
   );

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

Теперь я рекомендую проверить вашу конечную точку с помощью POSTMAN, чтобы вы могли дважды проверить, что вы получаете тело. Тогда, если вы уверены, что тело там после использования почтальона, тогда мы могли бы что-то сделать с этим телом.

Вы также можете проверить свою хром-консоль на вкладке сети, чтобы проверить ответ на запрос DELETE.

Я столкнулся с этой проблемой несколько лет назад.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/DELETE

У запроса есть тело Может быть у
успешного ответа есть тело Может быть
безопасно Нет
Идемпотентное Да
Кэшируемое Нет
Разрешено в HTML-формах Нет

https://restfulapi.net/http-methods/

HTTP DELETE Как указано в названии, API DELETE используются для удаления ресурсов (идентифицируемых Request-URI).

Успешный ответ на запросы DELETE ДОЛЖЕН иметь код ответа HTTP 200 (ОК), если ответ> включает объект, описывающий статус, 202 (Принято), если действие было поставлено в очередь, или 204 (Нет содержимого), если действие было выполнено, но ответ не включает сущность.

Операции DELETE идемпотентны. Если вы УДАЛИТЕ ресурс, он будет удален из коллекции ресурсов. Неоднократный вызов API DELETE для этого ресурса не изменит результат - однако повторный вызов DELETE для ресурса вернет 404 (НЕ НАЙДЕН), поскольку он уже был удален. Некоторые могут возразить, что это делает метод DELETE неидемпотентным. Это предмет обсуждения и личного мнения.

Если запрос проходит через кеш и Request-URI идентифицирует один или несколько кешированных в данный момент объектов, эти записи СЛЕДУЕТ рассматривать как устаревшие. Ответы на этот метод не кэшируются.

Если вы, например, используете angular, используя httpClient, вы можете реализовать что-то вроде этого, в настоящее время это работает для меня в angular 6+

       deleteWithBody(module: string, key: string, value: any): Observable<any> {
    const options = {
      headers: new HttpHeaders(),
      body: value
    };
    return this._httpClient.delete(
      this.baseUrl + module + this.env + '/' + key,
      options
    );
  }

Надеюсь, это поможет вам, с уважением

Другие вопросы по тегам