【问题标题】:Object inside response body for http errorhttp错误的响应主体内的对象
【发布时间】:2020-09-13 07:36:35
【问题描述】:

我试图弄清楚在 http 调用期间发生错误时如何访问响应正文中的对象。 我的后端使用详细的自定义错误对象填充 http 响应,如下所示:

{
    "title": "UNAUTHORIZED WEB",
    "message": "Sorry, but seems that your access is denied or not valid anymore."
}

如果我调用此端点并尝试读取错误,如下所示:

    this.http.get<any>(URL).subscribe(
        () => { ... stuff ... },
        (error) => console.log(error)
    )

它只是打印代码,甚至没有 HttpErrorResponse 对象,尽管检查网络我可以清楚地看到内部响应中有这样的对象。如何访问响应中的对象?

【问题讨论】:

  • 您能否详细说明当前打印到您的控制台的内容、您收到的 HttpErrorCode 以及您是否尝试从另一个客户端(如邮递员)访问该网址(是否有效)。跨度>
  • 得到响应时api的状态码是什么?
  • 在这个例子中控制台打印的是 '401' 而没有别的。使用邮递员我也看到了响应错误正文。我想要实现的是从 Angular 应用程序中读取此错误响应正文并在屏幕上打印自定义消息,因为每个端点都有其独特的错误描述,我不想复制它们
  • 在下面查看我的答案。
  • 您是否在项目中使用了任何 httpinterceptors?

标签: angular http error-handling response


【解决方案1】:

如果您收到此对象的状态码为 200,您将永远不会在订阅的错误回调中得到它。但如果代码是 500、400 左右,它们是真正的 http 错误代码。

您应该能够在回调中使用 error.body 进行访问。

【讨论】:

  • 状态码代表正确的状态码。例如,如果它被禁止是 403,如果在评估请求时出现问题,它是 500 等等。不幸的是,如果我打印 error.body 我什么也得不到,但如果我检查网络,在响应选项卡下它就在那里
  • 您在项目中使用了任何 httpinterceptors 吗?
  • 是的,我使用一个来附加授权标头,一个用于打印以控制完整的 http url 和响应
  • 检查是否有拦截器,修改响应。或者,如果您在 http 客户端之上编写了任何自定义 http 层。如果您正在修改错误响应,请检查那里。
  • 感谢您的建议,看起来我的授权拦截器以某种方式修改了响应,再次感谢帮助我解决这个问题
猜你喜欢
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2018-11-27
  • 2014-01-25
  • 1970-01-01
相关资源
最近更新 更多