angular HttpClient :如何从响应的标头获取值

一、前端代码部分:

1、需要在HttpService中post的配置项中添加observe:'response'

post(url:string, body:any |null, options: {

        headers?: HttpHeaders | {

                [header:string]:string |string[];

        };

        observe:'response';

        params?: HttpParams | {

                [param:string]:string |string[];

        };

        reportProgress?:boolean;

        responseType?:'json';

        withCredentials?:boolean;

}): Observable>;

请仔细研究上述post请求的配置项option,具体配置如下:

_post_form(url:string, body:any): Observable {

            return this.http.post(url, body, {reportProgress:true, observe:'response'})

            .pipe(retry(0), catchError((err) =>this.handleError(err, this.router)));

 }

要注意!!!observe:'response'设置后,接口响应拿到的是包含status,statusText,body等的全部响应信息,取值时要注意用result.body才能拿到要的内容。

2、获取响应头参数方法, res为接口响应,resHeader为要获取的响应头的标头名称(小写)

this.commonService.getResponseHeaders(result, 'content-disposition');

getResponseHeaders(res, resHeader) {

          const keys = res.headers.keys(); // 获取响应头各参数名数组

          const headers = keys.map(key =>`${key.toLowerCase()}:${res.headers.get(key)}`); // 获取响应头各参数名及参数值的数组

          let resHeaderContent ='';

          if (resHeader && headers && headers.length) {

                headers.forEach((head) => {

                        if (head.indexOf(resHeader) != -1) {

                                resHeaderContent = head.split(':')[1];

                          }

                });

          }

          return resHeaderContent;

}

贴出keys和headers的打印值(key.toLowerCase(),是因为谷歌的key打印出来都是小写开头,而IE是大写开头,这里要统一处理为小写)


二、后端代码部分:

Access-Control-Expose-Headers响应报头指示哪些报头可以公开

如果客户端获取到想要的请求头,则必须使用Access-Control-Expose-Headers 列出他们。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容