当前位置: 首页 > 知识库问答 >
问题:

当API返回204状态代码时,httpclient响应为空

酆高翰
2023-03-14

我有一个Restendpoint/产品/最新,如果没有产品,它将返回204,以及以下通用角度服务:

  getFromAPI(url: string) {
    const params = new HttpParams();

    return this.http
        .get(url, { params: params })
        .catch((err: HttpErrorResponse) => {
            console.error(`Backend returned code ${err.status}, body was: ${err.error}`);                  
            return Observable.of([]);
        });
  }

 getFromAPI() {
        return this.masterService.get('/Products/latest').map((res: Response) => {
            if (res.status === 204) {
                return Observable.of([]);
            } else {
                return res;
            }

        });
    }

但是,当服务生成 204 代码时,我收到以下错误:

TypeError:无法读取null的属性“status”

这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?

共有1个答案

狄子真
2023-03-14

首先,我会说你的后端为空集合返回204而不是200和空列表是很奇怪(或错误的)。

使用 Angular7 和 RxJS6,我构建了一个测试用例,其中我的后端配置如下:

[HttpGet("/Products/latest")]
public async Task<NoContentResult> list()
{
  return NoContent();
}

在前端使用:

public getFromAPI() {
  return this.httpClient.get('/Products/latest', { observe: 'response' }).pipe(
    switchMap(res => res.status === 204 ? of([]) : of(res))
  ).subscribe();
}

尽管没有身体,但回应显然包含了一种状态:

您的问题可能出在< code>this.masterService中,它似乎代理了您的http客户端并吞掉了一些属性。

 类似资料:
  • 我试图让ApacheHttpClient触发HTTP请求,然后显示HTTP响应代码(200404500等)以及HTTP响应正文(文本字符串)。需要注意的是,我使用的是因为大多数HttpClient示例都来自和API从版本3到版本4发生了巨大变化。 不幸的是,我只能让HttpClient返回状态代码或响应主体(但不是两者)。 这是我所拥有的: 所以我问:使用库,如何从同一

  • 我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头

  • 问题内容: 我正在尝试让Apache HttpClient触发HTTP请求,然后显示HTTP响应代码(200、404、500等)以及HTTP响应正文(文本字符串)。重要的是要注意我正在使用,因为那里有大多数HttpClient示例,并且API从版本3到版本4有了很大的变化。 不幸的是,我只能使HttpClient返回状态代码 或 响应正文(但不能同时返回两者)。 这是我所拥有的: 所以我问: 使用

  • 我在android上使用MapBox方向图,我只是想得到以后在地图上绘制的方向图。 但是,我从调用中得到的响应从来都不可用,因为response.body()返回null。 当我打电话回应时。code()我得到状态代码422,根据Mapbox API,这意味着“给定的请求无效。响应的消息键将包含对无效输入的解释。” 回应。message()返回字符串“Unknown”。 response.erro

  • 因为它创建了一个新的资源,所以如果它返回状态代码201是合适的,但目前它返回200。 我发现如何设置状态代码的唯一方法是让方法返回一个并在那里设置它,但我确实不希望我的所有接口返回一个泛型响应,而不是实际的响应对象(在本例中是)。

  • 我们最近从springfox迁移到springdoc openapi 3。其中一个API返回大约2MB的数据,它在springfox中正常工作,但是springdoc openapi用户界面在几分钟内没有响应,渲染也需要2分钟以上。有什么办法可以解决吗?