我正在使用令牌呼叫服务
Failed to load resource: the server responded with a status of 401 (Unauthorized)
Http failure response for http://localhost:65291/api/post: 401 Unauthorized
相同的调用在带有标题的Postman中有效;
Content-Type: application/json
Authorization: Bearer token
离子中的功能是
getPosts() {
var header = new HttpHeaders({ "Content-Type": "application/json" });
header.append("Authorization", "Bearer " + this.token);
console.log("Bearer " + this.token);
return new Promise(resolve => {
console.log(this.apiUrl + '/post');
this.http.get(this.apiUrl + '/post', { headers: header}).subscribe((data: Post[]) => {
resolve(data);
}, err => {
console.log(err);
});
});
}
为令牌添加了日志,以确保将其正确添加到标头中(令牌很好)。 apiUrl变量的值为http://localhost:65291/api。
这是怎么了? Cors已启用...邮递员工作正常...
谢谢
答案 0 :(得分:0)
我认为您肯定有客户端方面的问题(因为它是401,而且您提到Postman也可以)。
当我尝试以与您相同的方式添加标题时,我遇到了类似的问题,因此建议您尝试这样做(以消除此问题):
getPosts() {
// try forming headers object in one go:
let token = "Bearer "+this.token
let headers = new HttpHeaders({
"Content-Type": "application/json",
"Authorization": token
});
// now here I am not sure why you do promise wrapping this way, but then I would suggest:
return this.http.get(this.apiUrl + '/post', { headers: headers })
.toPromise()
.then((data: Post[]) => { // Success
console.log(data);
resolve(data);
}, (err) => {
console.log(err);
});
}
如果问题仍然存在-请分享您使用的Angular和Http模块版本?
也可以在这里查看此问题:How to correctly set Http Request Header in Angular 2
如果您使用的是Angular 4.3+,请特别提供以下答案: How to correctly set Http Request Header in Angular 2
答案 1 :(得分:0)
过一会儿我发现了问题,
header.append(“ Authorization”,“ Bearer” + this.token);是错的。它使用了
let headers = new HttpHeaders({“ Authorization:” +“ Bearer” + this.token})
设置多个标题:
this.http
.post('api/items/add', body, {
headers: new HttpHeaders({
'Authorization': 'my-auth-token',
'x-header': 'x-value'
})
}).subscribe()
答案 2 :(得分:0)
我有一个类似的问题,它可以在启用邮递员和cors的情况下工作,但是在应用程序中不起作用,我的问题是我在API安全配置的URL末尾有/
,发出没有/
的请求,我只是将其从请求网址中删除,
您还可以在安全性配置中添加/*
或将/
放入您的应用中,URL必须相同。
(也许您已经解决了您的问题,这是另外一个问题,但这是可能的解决方案)