我正在尝试使用Angular中的http。我的代码如下所示:
const url ='this is my url';
const headers = new Headers({'Authorization': 'this is my token'});
return this.http.put(url, {headers: headers}).toPromise().then......
但我一直将401 Unauthorized视为请求状态代码。 我尝试将我的请求从Chrome网络标签复制到Postman,我注意到授权标题已添加到请求正文,而不是标题。
这是正常的吗?
如果我在Postman中手动添加授权标头作为标头,则请求按预期工作。
答案 0 :(得分:4)
根据文档https://angular.io/api/http/Http
Http.put 方法签名是:
put(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>
因此,您的第二个参数应该是数据/正文,而不是选项。
尝试:
return this.http.put(url, {}, {headers: headers}).toPromise().then......
答案 1 :(得分:2)
当您执行PUT
请求时,您需要提供正文,因为您现在正在请求headers
作为正文。所以你的请求就像是
this.http.put(url, body, headers)
答案 2 :(得分:0)
https://angular.io/guide/http#adding-headers
当我在angular2 +框架中使用httpclient时,我通常会这样使用:
import { HttpHeaders } from '@angular/common/http';
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'my-auth-token'
})
};
您是否在标题中检查了Content-Type
?
如果你想在服务层添加set auth头,当你调用httpClient时,你可以使用Http拦截器(https://alligator.io/angular/httpclient-interceptors/)