Отображение сообщения CustomError и кода состояния, выданных с сервера, в HttpErrorResponse - PullRequest
0 голосов
/ 13 октября 2019

Я строю сервер ASP.NET Core API с клиентом Angular. Я хочу, чтобы клиент мог перехватить исключение, выданное сервером. Я использую перехватчик HTTP для обработки ошибок в Angular, но это возвращает:

500 Внутренняя ошибка сервера

на стороне клиента в HttpErrorResponse.

Я хочу, чтобы он возвращал мое сообщение об исключении. Почему HttpErrorResponse не ловит брошенный CustomException?

import { Injectable } from "@angular/core"
import {  of } from "rxjs";
import { tap} from "rxjs/operators";
import { ToastrService } from 'ngx-toastr';
import {
HttpEvent,
HttpInterceptor,
HttpHandler,
HttpRequest,
HttpResponse,
HttpErrorResponse
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { retry, catchError } from 'rxjs/operators';


import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/empty';
import 'rxjs/add/operator/retry';
@Injectable()
export class HttpConfigInterceptor implements HttpInterceptor {

intercept(request: HttpRequest<any>, next: HttpHandler): 
Observable<HttpEvent<any>> {
    return next.handle(request)
      .catch((err: HttpErrorResponse) => {

        if (err.error instanceof Error) {

          console.error('An error occurred:', err.error.message);

        } 
        else {

          console.error(`Backend returned code ${err.status}, body 
       was: ${err.error}`);

        }


        return Observable.empty();
      });
  }

1 Ответ

0 голосов
/ 13 октября 2019

Вам нужно использовать оператор catchError, чтобы изменить ошибку и выбросить ее.

return next.handle(request).pipe(
  catchError((error: HttpErrorResponse) => {
    let data = {};
    // Here you can set a different object to be returned if you want
    // if you need it only for specific status command, you can check for error.status
    data = {
      reason: error && error.error && error.error.reason ? error.error.reason : '',
      status: error.status
    };
    return throwError(error);
  }));

Вы можете проверить больше в репо vigneshsithirai .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...