Невозможно определить пользовательские заголовки, используя HttpHeaders на Angular 8 - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь выполнить запрос GET к SAP Business Objects, для которого требуются некоторые пользовательские заголовки. Я следовал Angular документации , чтобы определить заголовки, используя класс HttpHeaders, но кажется, что пользовательские заголовки (X -...) не распознаются.

Вот мой код для создания Заголовки и выполнить запрос GET:

getEnvId(token: string) {

    this.tokenHdr = { 
      headers: new HttpHeaders({
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Accept-Language': 'en-US',
        'X-SAP-PVL': 'en-US',
        'X-SAP-LogonToken': token
      })
    }

    console.log(this.tokenHdr);

    return this._http.get('http://' + this.environment + '/biprws/infostore/cuid_' + this.reportCuid, this.tokenHdr)
  }

Файл console.log (this.tokenHdr) выглядит следующим образом: enter image description here

И ответ об ошибке: : enter image description here

Я могу получить токен и передать его этому запросу, так как я могу успешно распечатать токен на консоли перед этим шагом. Токен извлекается с помощью запроса POST без каких-либо пользовательских заголовков, поэтому я предполагаю, что проблема связана с пользовательскими заголовками.

На вкладке Сеть в инструментах разработчика браузера: enter image description here

Ответы [ 2 ]

1 голос
/ 28 января 2020

Попробуйте проверить наличие HttpInterceptors, которые выполняются по запросам. Возможно, ваши заголовки перезаписываются.

https://angular.io/guide/http#http -интерцепторы

1 голос
/ 28 января 2020

попытаться сделать так, чтобы решить эту проблему - ваша проблема: метод set возвращает объект заголовков каждый раз, вы можете сделать это. Таким образом, оригинальные заголовки из перехваченного запроса также будут сохранены.

let headers = new HttpHeaders().set('Accept', 'application/json')
     .set('Content-Type' , 'application/json')
     .set('Accept-Language','en-US')
     .set('X-SAP-PVL', 'en-US')
     .set('X-SAP-LogonToken', token)

let apiUrl: string = 'http://url';

return this.http.get(apiUrl, {headers});

здесь то, что я сделал, проверьте, может ли это помочь

// для получения токена

  loadToken() {
    const token = localStorage.getItem('token');
    this.authToken = token;
  }

 createAuthHeader() {
    this.loadToken();
    const headers = new HttpHeaders().set(
      'Authorization',
      `Bearer ${this.authToken}`
    );
    return { headers };
  }

  someTest() {
    return this.http.get(`${this.url}/count`, 
      this.createAuthHeader());
  }
...