c# - چگونه پیام خطا از subscribe در Angular 8 با TypeScript نمایش داده شود؟


من یک بکاند سیشارپ دارم با استثنای سفارشی زیر:

try
{
  ...
}
catch (UserDetailAlreadyRegisteredException ex)
{
  return BadRequest("The user is already registered");
}   

این استثنا پیام «کاربر قبلاً ثبتنام شده است» را برمیگرداند و در بکاند بهخوبی کار میکند.

با این حال، وقتی آن را از سمت فرانتاند فراخوانی میکنم، پیام خطا نمایش داده نمیشود، فقط [object, object] را میگیرم. و وقتی سعی میکنم شیء را نیز لاگ کنم، هیچ چیزی مفیدی داخل آن نیست. اینگونه آن را در فرانتاند فراخوانی میکنم:

  onRegisterSubmit(user: User): void {
    this.userService.registerNewUser(user).subscribe(() => {
      this.toastr.success('Registration Completed', 'Success');
    },
      error => {
        // console.log(error._body);
        this.toastr.error(error, 'Failed');
      }
    );
  }

آیا راهی برای انتقال پیام از بخش پشتی به بخش جلویی وجود دارد؟

پاسخ شماره ۱

شما میتوانید خطاها را با استفاده از کدهای وضعیت رهگیری کنید. آنها را در بکاند C# ارسال کنید

سیشارپ

try
{
  ...
}
catch (UserDetailAlreadyRegisteredException ex)
{
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
return BadRequest("The user is already registered");
}   

service.ts

من فرض میکنم شما از Angular 9+ استفاده میکنید. از RXJS throwError برای رهگیری و ارسال observable خطا استفاده کنید.

    import { throwError } from 'rxjs';
    
registerNewUser(user){

return this._http.post("url", data)
      .pipe(catchError(this.errorHandler));
}


    public errorHandler(errorResponse: HttpErrorResponse) { 
      //write your own error I am returning response as such
        return throwError(errorResponse);
      }

کامپوننت.ts

onRegisterSubmit(user: User): void {
    this.userService.registerNewUser(user).subscribe(() => {
      this.toastr.success('Registration Completed', 'Success');
    },
      (error) => {
        // console.log(error._body);   **//this block gets activated at error**
        this.toastr.error(error, 'Failed');
      }
    );
  }