【问题标题】:how can I call a delete method properly?如何正确调用删除方法?
【发布时间】:2021-01-15 18:41:33
【问题描述】:

这实际上是我第一次尝试调用删除方法 angular。 我的 dataService 中的代码是:

deleteMeaningItem(data): Observable<Result> {
    return this.http.delete<Result>(url, data);
  }

在组件中:

 this.dataService.deleteMeaningItem({id: id}).subscribe(res => {
 if (res.status) {
    //do something          
  }
  });

但我收到 415 Unsupported Media Type 错误! 我还尝试在我的请求标头中发送 Content-Type,例如:

deleteMeaningItem(data): Observable<Result> {
     return this.http.delete<Result>(global.dataUrl + '/MeaningItems/Delete', { params: data,
     headers: {'Content-Type': 'application/json'}});
}

然后我收到 400 Bad Request 错误! 我需要你的帮助。

【问题讨论】:

    标签: angular http-headers httprequest http-delete delete-method


    【解决方案1】:

    我猜问题可能出在data 对象中。我将首先检查 API 的文档,因为您似乎还缺少 Autorization 标头,而 delete 等方法通常需要该标头

    【讨论】:

    • 我已经在所有请求中提供了授权标头,这不是问题。
    【解决方案2】:

    我所要做的就是在请求选项中提供正文。所以我这样做了:

    deleteMeaningItem(meaningId): Observable<Result> {
        const options = {
          headers: new HttpHeaders({
            'Content-Type': 'application/json',
          }),
          body: meaningId,
        };
        return this.http.delete<Result>(global.dataUrl + '/MeaningItems/Delete', options);
      }
    

    【讨论】:

    • 还有另一个答案here
    【解决方案3】:

    也许使用 RXJS 会更容易。

    先定义删除函数@Service

    delete(id: string): Observable<Result> {
     return this.httpClient.delete<Result>(`${global.dataUrl}/MeaningItems/${id}`);
    }
    

    然后试着这样称呼它:

    this.service.delete(id).pipe(
      tap(r => console.log('success', r)),
      catchError(e => {
        console.error('error', e);
        return throwError(e);
      })
    ).subscribe();
    

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 1970-01-01
      • 2012-07-19
      • 2015-07-18
      • 2017-07-24
      • 2016-09-02
      • 2019-11-08
      • 1970-01-01
      相关资源
      最近更新 更多