как получить ошибку как объект при подписке на http get?

#angular #typescript

#angular #машинопись

Вопрос:

У меня есть asp.net базовый WebAPI и веб-приложение Angular9.

Я хочу получить ошибку в subscribe как объект, а не только как строку.

 this.http.post<TestSystem>(this.url, testsystem).subscribe((result) => {
   // do something
}, err  => {
    console.log(typeof err);
});
  

Th asp.net возвращает базовый бэкэнд

         [HttpPost(template: "save")]
    public ActionResult<TestSystemBean> Save(TestSystemModel model)
    {
        // Validate reportRequest
        if (ModelState.IsValid == false)
        {
            return BadRequest("Invalid ModelState");
        }
    }
  

Но я получаю только строку «Неверный запрос», а не объект, чтобы получить сообщение «Недопустимое состояние модели».
Как я могу получить ошибку как объект?

В ErrorInterceptor в AngularApp я получаю полный HttpErrorResponse:

   intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(catchError(err => {
  debugger;
  if ([401, 403].includes(err.status) amp;amp; this.authenticationService.userValue) {
    // auto logout if 401 or 403 response returned from api
    this.authenticationService.logout();
  }
  const error = (err amp;amp; err.error amp;amp; err.error.message) || err.statusText;
  return throwError(error);
}))
  

}

Комментарии:

1. Обновите полный код angular здесь.

2. каково значение err.error.message в вашем случае?

3. @jkonst это было не определено, но я решил это вчера

Ответ №1:

Я решил это. Строка

 const error = (err amp;amp; err.error amp;amp; err.error.message) || err.statusText;
  

в ErrorInterceptor сделал какую-то магию, которую я не понимаю, но удалите эту строку, и я получу HttpErrorResponse, как я и хотел.