簡體   English   中英

如何在Angular5中通過`httpclient`刪除請求傳遞正文

[英]How to pass body through `httpclient` delete request in Angular5

如何在刪除請求中通過 httpClient 傳遞正文?

請檢查我的代碼。 是否有任何想法在刪除請求中通過正文傳遞數據。 沒有正確的來源如何在 angular 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)

目前 Angular HttpClient 不支持刪除方法中的正文,您可以通過請求選項發布正文。

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測試您的終點,以便您可以仔細檢查您是否正在接收正文。 那么如果你在使用郵遞員后確定屍體在那里,那么我們也許可以對這個屍體做一些事情。

您還可以在網絡選項卡上檢查您的 chrome 控制台,以檢查對 DELETE 請求的響應。

幾年前我確實遇到過這個問題。

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

請求有正文可能
成功的反應有身體可能
安全
冪等
可緩存
允許在 HTML 表單中使用

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

HTTP DELETE 顧名思義,DELETE API 用於刪除資源(由 Request-URI 標識)。

如果 > 響應包含描述狀態的實體,則 DELETE 請求的成功響應應該是 HTTP 響應代碼 200(OK),如果操作已排隊,則為 202(已接受),如果操作已執行但為 204(無內容)響應不包括實體。

DELETE 操作是冪等的。 如果您刪除一個資源,它將從資源集合中刪除。 在該資源上重復調用 DELETE API 不會改變結果——但是第二次在資源上調用 DELETE 將返回 404(未找到),因為它已被刪除。 有些人可能會爭辯說它使 DELETE 方法非冪等。 這是一個討論和個人意見的問題。

如果請求通過緩存並且請求 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
    );
  }

希望對你有幫助,問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM