c# - Angular 2 使用帶有標頭的 Http 刪除以消耗 Web API REST
我使用了 Angular 2 發行版本,並使用來自 @angular/http 的 Http 和 Headers。
我嘗試呼叫動詞 DELETE,帶上標頭,其他動詞 POST、GET 和 PUT 都可以。但是用「DELETE」就不行。
我的程式碼:
remove(url:string, id:any) {
let headers = new Headers();
headers.append('Authorization': 'Bearer ' + this.token);
return this.http.delete(url, {
headers: headers;
body: { id: id }
}).map(response => response.json());
}
收到的回應是:請求的資源不支持 HTTP 方法 'delete'。
在我的控制器中,我有一些像這樣的:
[HttpDelete]
public Task<HttpResponseMessage> Delete(int id)
{
//..
}
謝謝你幫助我,問候!!
答案#1
對我有效的解決方法是,使用查詢字串,方法如下:
remove(urlController:string, id:any){
let headers = new Headers();
headers.append('Authorization': 'Bearer ' + this.token);
return this.http.delete(urlController + '/?id=' + id, {
headers: headers;
}).map(response => response.json());
}
範例:
remove(urlController:string, id:any){
let headers = new Headers();
headers.append('Authorization': 'Bearer ' + this.token);
return this.http.delete('users'+ '/?id=' + '2', {
headers: headers;
}).map(response => response.json());
}
答案#2
問題是你的 API 伺服器必須允許 HTTP DELETE 方法。當你執行 HTTP DELETE 請求時,你的瀏覽器會先向伺服器發送一個 HTTP OPTIONS 請求;伺服器會回應一個包含允許方法列表的 Access-Control-Allow-Methods 標頭。
你必須發送像這樣的 OPTION 回應標頭:
Access-Control-Allow-Methods: DELETE
在此閱讀更多:ASP.NET Web API 的 PUT 和 DELETE 的 CORS 支援
