相同的代码在Angular 2上也有效,但在Angular 6上,它在http上返回错误(即http失败并返回到错误处理程序),但是请求成功(代码:200并按预期返回数据)
基本上是核心问题的更新摘要
1-我从Angular4开始就使用Angular2 HTTP而不是HttpClient
2-尽管这不是主要问题,但我在chrome上显示了CORS错误(可能是在使用httpclient之后)
3-无需添加responsType,解决了服务器端的cors错误后,它就可以工作了。
旧的错误代码:
var headers = new Headers();
headers.append("Accept", 'application/json');
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let options = new RequestOptions({ headers: headers });
let postParams = "grant_type=password&username="+username+"&password="+password;
this.http.post("api/Token", postParams, options)
.subscribe(data => {
console.log(data);
},
error => {
//can I get the response body here?
console.log(JSON.stringify(error));
在此链接https://github.com/angular/angular/issues/19555上发现了相关问题 所以我尝试添加responseType,如下所示
也根据这个问题,我试图传递responseType属性,但是它也不起作用 Angular 6: How to set response type as text while making http call
this.http.post(AppSettings.apiaddress + "Token", postParams, {headers,responseType: ResponseContentType.Text})
如果仍然无法正常工作,是否有办法将错误处理程序上的数据作为解决方法?
感谢您的帮助,但如果您不知道答案,则无需拒绝投票,其他人可以提供帮助,谢谢
答案 0 :(得分:0)
请尝试这种方式。
var headers = new Headers();
headers.append("Accept", 'application/json');
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let postParams = "grant_type=password&username="+username+"&password="+password;
this.http.post("api/Token", postParams, {headers, 'responseType': 'json'})
.subscribe(data => {
console.log(data);
},
error => {
//can I get the response body here?
console.log(JSON.stringify(error));
,并尝试将var headers = new Headers();
替换为var headers = new HttpHeaders();