angular 5 httpclient, на посте, ответ не возвращает пользовательских заголовков, только возвращает объект ответа - PullRequest
0 голосов
/ 19 ноября 2018

Я не получаю фактические заголовки http, когда выполняю пост-вызов http, используя Angular 5 common httpClient.Я передаю наблюдение: «ответ» в запросе, чтобы получить полный ответ (по умолчанию httpClient возвращает только тело в ответе).

Я хочу прочитать значение csrftoken из ответа заголовка http.Я вижу, что csrftoken доступен в заголовках ответов с использованием сетевого представления браузера Chrome.

Но то же самое недоступно при чтении ответа httpClient в Angular.

 post(inURL, data, config = undefined) {
    let headers, options;
    if (config){
        options = config;
    } else {
        //headers = this.getDefaultHeader();
        //options = new RequestOptions({ headers: headers });
        options = httpOptions;
    }
    options = { ...options, observe: 'response' };

    let action = this.httpService.post(inURL, data, options);
    return new Promise((resolve, reject) => {
        action.subscribe(
            response => resolve(response),
            error => {
                this.interceptError(error);
                reject(error);
            }
        );
    });

} enter image description here

и объект заголовков ответов выглядит так во время отладки в отладчике Chrome, поскольку вы видите, что csrftoken недоступен в качестве ключа для объекта ответа

enter image description here

Вот что у меня есть для доступа к httpheaders

   let headers: HttpHeaders = response.headers;
    if (headers && headers['csrftoken']) {
        let token: String = headers.get('csrftoken');
    }

1 Ответ

0 голосов
/ 20 ноября 2018

Как уже предлагалось в комментариях, вы не можете проверить, существует ли заголовок так, как вы это делаете. Вам нужно использовать имеет метод. Ваш код должен выглядеть так:

let headers: HttpHeaders = response.headers;
if (headers && headers.has('csrftoken')) {
   let token: String = headers.get('csrftoken');
}
...