如何使用HttpClient访问响应头? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用HttpClient访问响应头? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我正在尝试从get请求中获取X-Total-Count值。

在我的meal.service.ts中,我使用此函数来调用服务。

import { Injectable }              from '@angular/core';
import { Observable }              from 'rxjs/Observable';
import { catchError, map, tap }    from 'rxjs/operators';
import { of }                      from 'rxjs/observable/of';
import { HttpClient, HttpHeaders,
         HttpParams,
         HttpResponse }            from '@angular/common/http';

getMeals (page:number): Observable<Meal[]> {
    let httpParams = new HttpParams().set('where', '%')
      .set('orderBy', 'meal_name')
      .set('page', page.toString())
      .set('items', '10');
    return this.http.get<Meal[]>(this.mealUrl, { params: httpParams  })
      .pipe(
        tap(meals => { this.log(`fetched entries`); console.log(meals.headers)  }),
// meals.headers is undefined
        catchError(this.handleError<Meal[]>('getMeals'))
      );
  };

我收到错误:

src / app / meal.service.ts(52,71)中的错误:错误TS2339:类型'Meal []'上不存在属性'标题'。

在this.meals中,我只看到来自typ Meal但没有标题的数据集。

在我的meal.component.ts我正在使用这项服务:

  getMeals(page:number): void {
    this.mealService.getMeals(this.page)
      .subscribe(data => {
        this.count = data.headers.get('X-Total-Count'), // didn't work
        this.meals = data
      })
  }

从请求中获取标头的正确方法是什么?

我将代码更改为:

  getMeals (page:number): Observable<any> {
    let httpParams = new HttpParams().set('where', '%')
      .set('orderBy', 'meal_name')
      .set('page', page.toString())
      .set('items', '10');
    return this.http.get<any>(this.mealUrl, { params: httpParams, observe: 'response'} )
      .pipe(
        catchError(this.handleError<any>('getMeals'))
      );
  };

之后我有一个身体和标题。

答案

我不得不将Observable更改为Observaable并添加observe:'response'。

  getMeals (page:number): Observable<any> {
    let httpParams = new HttpParams().set('where', '%')
      .set('orderBy', 'meal_name')
      .set('page', page.toString())
      .set('items', '10');
    //this.messageService.add('Debug: ' + httpParams);
    return this.http.get(this.mealUrl, { params: httpParams, observe: 'response'} )
      .pipe(
        //tap(meals => { console.log(meals.headers)  }),
        catchError(this.handleError<any>('getMeals'))
      );
  };

感谢您提供文档链接。

以上是关于如何使用HttpClient访问响应头? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用httpClient下载网页

接口测试——HttpClient工具的https请求代理设置请求头设置获取状态码和响应头

使用User-Agent防止HttpClient发送http请求时403 Forbidden和安全拦截

接口测试——HttpClient工具的https请求代理设置请求头设置获取状态码和响应头

如何在 Blazor WASM 客户端中访问 Httpclient 标头

如何删除 HttpClient 请求标头 C# 中的默认字符集