【问题标题】:Sending body in HttpClient delete method (Angular 5)在 HttpClient 删除方法中发送正文(Angular 5)
【发布时间】:2018-02-08 12:29:46
【问题描述】:

我正在将 Http 迁移到 Angular 5 应用程序中的 HttpClient 并且一切都很好,直到我使用其中一项服务的这种方法:

deleteMultipleObjects(userId: number, officeId : number, objectsData : any) {
  const url = `${APP_URL}/delete-objects/${userId}/${officeId}`;

  let headers = new Headers({ 'Content-Type': 'application/json' });

  this.appOptionsService.log("Deleting multiple objects.....", url, objectsData);

  return this.http
    .delete(url, { headers : headers, body : objectsData } )
    .map(this.extractData)
    .catch(this.handleError);
}

如你所见,我在删除调用的主体中传递了一个对象objectsData,它基本上具有这种结构:

{
  objectIds: [id1, id2, id3, ...]
}

我看到HttpClient 中的delete 方法不允许包含正文,那么我如何发送对象ID 数组以通过调用删除?我有很多与这个相同的删除调用,所以我必须更改代码中的很多东西以适应它......

谢谢!

【问题讨论】:

  • body for delete 方法并不可取,因此许多平台已经开始忽略 body for delete 请求。
  • 那么,如果我想一次删除多个对象,是否必须使用 PUT 请求而不是 DELETE?
  • 是的。这是实现多次删除的唯一解决方法。
  • 谢谢,我会更改所有的电话然后...干杯。

标签: angular httpclient


【解决方案1】:

您不能在 Angular 中的 DELETE http 请求中发送正文。

MDN 上的 HTTP 规范说这是可能的。 documentation page.

如果您需要此功能,您应该使用PUT 作为解决方法。另一种允许多个的方法,例如id 在您的删除 API 端点上。例如:

https://server.com/api/delete?ids=1,2,3,4,5

这需要对您的 api 进行一些更改。

【讨论】:

  • 我将 DELETE 请求更改为 PUT 等效项,因此我可以使用调用中的主体来发送要删除的对象。
  • HTTP 删除可能有正文。这是一个缺失的角度特征。 developer.mozilla.org/en-US/docs/Web/HTTP/Methods/DELETE
  • @GlueLabs 目前,我回答了 MDN 文档页面没有此信息的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 2018-05-13
相关资源
最近更新 更多