Angular 6 HTTP обрабатывает успешный ответ (Sucess Code: 200) как ответ об ошибке - PullRequest
0 голосов
/ 30 октября 2018

Этот же код работал на Angular 2, но на Angular 6 он возвращает ошибку на http (т. Е. Http не удается обработчику ошибок), но запрос выполняется успешно (код: 200 и возвращает данные, как и ожидалось)

Обновление Сводная информация о проблеме, в которой возникла проблема с корсом

1 - я использовал Angular2 HTTP вместо HttpClient, примененного начиная с Angular4

2 - Хотя это не было основной проблемой, я получил сообщение об ошибке CORS в chrome (возможно, после использования httpclient)

3 - не нужно было добавлять responseType, после устранения ошибки 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: Как установить тип ответа в виде текста при выполнении http-вызова

      this.http.post(AppSettings.apiaddress + "Token", postParams, {headers,responseType: ResponseContentType.Text})

Если сейчас можно заставить его работать, есть ли способ получить данные об обработчике ошибок в качестве обходного пути?

Ценю вашу помощь, но если вы не знаете ответа, нет необходимости понижать голосование, чтобы другие могли помочь, спасибо

1 Ответ

0 голосов
/ 30 октября 2018

Пожалуйста, попробуйте этот способ.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...