Angular 6 HTTP将成功的响应(成功代码:200)作为错误响应来处理

时间:2018-10-29 21:20:59

标签: angular http cors

相同的代码在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})

如果仍然无法正常工作,是否有办法将错误处理程序上的数据作为解决方法?

感谢您的帮助,但如果您不知道答案,则无需拒绝投票,其他人可以提供帮助,谢谢

1 个答案:

答案 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();