首页 > 解决方案 > 如何以角度读取 Http 响应标头

问题描述

这是我的角度服务类代码。我在这个类中调用了 RESTful Web 服务,响应即将到来。响应标头具有 JWT Web 令牌我想在此 authUser 服务函数中读取响应标头并获取 JWT Web 令牌。怎么做?

import { Injectable } from '@angular/core';
import {ResponseBeanModule} from '../../module/responsebean/responsebean.module';
import { Http, Headers, Response } from '@angular/http';


@Injectable({
  providedIn: 'root'
})
export class AuthenticationService {
  constructor(private http: Http) { this._prepare()}
  private userUrl = 'http://192.168.1.152:8080/api/user/';

  endpointUrl: String;
  responseBeanModule: ResponseBeanModule = new ResponseBeanModule();
  options: any;
  headers: any;

  _prepare () {
    this.endpointUrl = this.userUrl;
    this.headers = new Headers();
    this.headers.set('Content-Type', 'application/json');
    this.options = {
      headers: this.headers,
      observe: 'body'
    };
  }



  public authUser(loginBean): Promise<ResponseBeanModule> {
    return new Promise((resolve, reject) => {
      this.http.post(this.userUrl, loginBean, this.options).subscribe(
        (data) => {
         alert(JSON.stringify(data));
         this.responseBeanModule = JSON.parse(data['_body'])
          return resolve( this.responseBeanModule );
        },
        (err) => {
          return reject(err);
        }
      );
    });

  }

}

标签: angularhttphttp-headers

解决方案


要么这是 Angular 的 HttpClient 的一个损坏的特性,要么他们从来没有打算让你阅读更多的标头,而不仅仅是Content-Typeand Content-Length—— 我只能使用 HTTP POST 或 HTTP GET 来读取这些标头:

  login(username = "", password = "") {
    return this.httpClient
      .post(`${environment.apiLocation}redfish/v1/SessionService/Sessions`,
        { username, password },
        {observe: 'response'})
      .pipe(
        map(response => {
          const keys = response.headers.keys();
          let headers = keys.map(key =>
            `${key}: ${response.headers.get(key)}`);
          this.logger.log('response headers', headers);

推荐阅读