Angular 如何将主体添加到HttpClient删除函数

Angular 如何将主体添加到HttpClient删除函数,angular,angular-httpclient,Angular,Angular Httpclient,我们的项目正在迁移到Angular4,并使用@angular/common/Httpclient作为默认的网络工具。但是我发现delete函数中没有bodyparams。如何添加正文以删除函数?谢谢 我也遇到了这个问题,我的解决方案是创建一个新的delete方法的HttpRequest,然后克隆这个请求,用您的数据重置它的主体 let req=newhttprequest('DELETE','url'); 让newReq=req.clone({body:[10]}); this.http.re

我们的项目正在迁移到Angular4,并使用
@angular/common/Httpclient
作为默认的网络工具。但是我发现delete函数中没有
body
params。如何添加正文以删除函数?谢谢

我也遇到了这个问题,我的解决方案是创建一个新的delete方法的
HttpRequest
,然后克隆这个请求,用您的数据重置它的主体

let req=newhttprequest('DELETE','url');
让newReq=req.clone({body:[10]});
this.http.request(newReq).subscribe((res)=>{
控制台日志(res);
},(错误)=>{
控制台日志(err);

});
您可以在HttpClient类上使用通用的
请求
方法。此方法的主体位于选项中。

例如
this.http.request('delete','url',{body:…})

通过使用httpOptions,您可以在其中设置标题和正文。 请参阅此

从'@angular/common/http'导入{HttpClient,HttpParams};
构造函数(私有http:HttpClient){}
deleteItem(项目:任何):可观察{
设params=newhttpparams();
params=params.append('itemId',item.itemId);
返回this.http.delete(`url`,{params});
}

他询问的可能是新的HttpClient而不是旧的http模块,但他所寻求的实现在这两种情况下都是相同的,请尝试通过共享的链接。看看这个:对于未来的读者-从Angular 4.3开始(包括Angular 5+)他们将主体从HttpClient的delete方法中删除,另一种方法是使用
http.request()
,就像下面发布的Andrii Ivanyk一样。删除它是因为Delete的规范不清楚其中BODY的用法。实际上,使用方法“Delete”创建HttpRequest并直接在构造函数中传递BODY是不起作用的。但是,方法“post”可以很好地工作,不确定您使用的是Angular的哪个版本,但是这在使用HttpClient的Angular 5中不起作用。打字文件表明正文不存在。您需要使用
this.http.request
-@StefanFalk,这可能是因为以RESTful方式删除内容的“正确”方法是为每个唯一的资源(例如:
/clients/
)创建一个唯一的URL。但不幸的是,现实生活中的API很少是RESTful的。@JosephTinoco不,我只是指调用本身。很容易就会有一个
this.http.delete()
方法来包装这个s.t。界面会更直观。@StefanFalk这是我的观点。“直观的”界面都是RESTful的,其他一切都是可能的,但只有使用丑陋/不那么直观的
this.http.request()
方法。这就像Angular说的“如果你想要好的、可读的代码,你必须在后端使用RESTful”。在Angular 9+中,你需要
this.http.request('DELETE','url',{body:…})
。在我的例子中,大写的方法字符串是必需的。这个问题已经包含了多个答案。你能解释一下(通过编辑你的答案)你的答案与其他答案的不同之处吗?也要知道,从长远来看,只有代码的答案是没有用的;不是作为OP请求的内容体。
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);
                   });
    });
import { HttpClient, HttpParams } from '@angular/common/http';


constructor(private http: HttpClient) { }    


deleteItem(item: any): Observable<any> {
    let params = new HttpParams();
    params = params.append('itemId', item.itemId);
    return this.http.delete<any>(`url`, { params });
}