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');
}
);
}
