首页 > 解决方案 > 调用 .NET Core 中缺少的端点会产生 404,但也可以作为对 Angular 的响应

问题描述

调用我的后端,我忘记了我们更改了端点的名称,所以我得到了 404。但是,我注意到在这种情况下提供的文本不是Not Found而是OK。如图所示,错误消息中的(正确)状态代码与(错误)状态名称之间缺乏相关性。

在此处输入图像描述

起初,我怀疑后端使用了类似这样的东西,忘记正确分类响应的状态码。然后,我意识到这是不可能的,因为端点不存在,所以内容不可能是由于在那里执行的任何事情。

//[HttpGet("coordinates/{id}")]
[HttpGet("coords/{id}")]
public async Task<ActionResult> GetCoordinates(int id)
{
  ...
  // if (output == null)
  //  return NotFound(id);


  return Ok(output);
}

我需要帮助来诊断问题,目前我不确定是后端需要触摸还是发生在 Angular 中。像这样的书,联系服务器的代码非常直接。

getCoordinates(id: number): Observable<boolean> {
  return this.http
  .get<boolean>(this.url + "coordinates/" + id);
}

然后像这样在组件中使用 observable(布尔值在 GET 上可能令人惊讶,但在我正在处理的实际情况下它是有意义的)。

onSave() {
  this.service.getCoordinates(this.id)
    .subscribe(
      suc => this.router.navigate([this.origin]),
      err => console.log(err));
}

错误处理响应的可能点在哪里?或者,在某种程度上,我不知道某种还不错的状态?我不确定在这里做出判断。

我只发现了这个,它只是证实了某种可疑的预感,而不是提供关于什么的暗示。此外,它是 PHP,所以我不确定相关性。

标签: c#angulartypescript.net-core.net-core-3.0

解决方案


根据RFC 7540 文档

对于 HTTP/2 响应,定义了一个带有 HTTP 状态代码字段的“:status”伪头字段
(参见 [RFC7231],
第 6 节)。这个伪头域必须包含在所有
响应中;否则,响应格式错误(第 8.1.2.6 节)。

HTTP/2 没有定义携带
包含在 HTTP/1.1 状态行中的版本或原因短语的方法。

这是关于相同的讨论:https ://github.com/whatwg/fetch/issues/599#issue-255768557 。

Fetch规范简单地定义statusTextstatus message 值,除非另有说明,否则为OK.

对于 HTTP/2,似乎可以通过多种方式解释状态消息:

  • 空字符串 - 因为没有理由短语“OK”
  • 因为这始终是默认的(虽然有 404 OK 会很奇怪)实现定义
  • 例如状态代码的一些默认原因文本

推荐阅读