在 Angular 和 .Net Core API 中显示自定义服务器端错误消息

jav*_*per 7 c# rest .net-core angular

我有一些用 C# 编写的 REST API,这些 API 是从 Angular 调用的(我使用的是 Angular 8 版本)。通话正常,工作正常。但是,如果出现任何异常,我无法以角度显示自定义的错误消息。例如,假设我在 C# 中有一个服务器端验证,它验证字段的值是否与字符串“abc”匹配。如果不匹配,它会抛出一个错误,并且在 UI(用 Angular 开发)中,我想显示消息

“指定的字符串无效”。

我的服务器端代码如下 -

if (headerValues.Equals("abc")) {
    throw new InvalidStringException("Invalid String specified", 999);
}
Run Code Online (Sandbox Code Playgroud)

无效InvalidStringException类如下 -

public class InvalidStringException : System.Exception
{
    int status { get; set; }
    public InvalidStringException() { }
    public InvalidStringException(string message, int status) : base(message) {
        this.status = status;
     }
}
Run Code Online (Sandbox Code Playgroud)

当该异常在服务器端引发并捕获时,它可作为 500 异常使用,但无法打印自定义消息。

我正在尝试在 Angular 中执行以下代码 -

} catch (error) {
  console.log("Error Status: ", error.status);
  console.log("Error Status: ", error.message);
}
Run Code Online (Sandbox Code Playgroud)

请建议如何处理这种情况。

adr*_*ons 3

您的 Angular 应用程序收到的错误对象应该是以下对象的实例HttpErrorResponse

你可以这样做来处理 http 错误:

if (error instanceof HttpErrorResponse) {
  if (!error.status) {
    console.log(error.message || error.toString());
  } else {
    console.log(`error status : ${error.status} ${error.statusText}`);
    switch (error.status) {
      case 401:
        this.router.navigateByUrl("/login");
        break;
      case 500:
        this.router.navigateByUrl("/login");
        console.log(`redirect to login`);
        break;
    }
  }
} else {
  console.error("Other Errors");
}

Run Code Online (Sandbox Code Playgroud)