将asp.net Web Api中捕获的异常返回到Angular 8的方法是什么?

问题描述 投票:0回答:2

我有类似的服务:

GetPaymentDeadlineExtension(data: PatientInput): Observable<any> {
  return this.httpClient.post<any>(
    this.root + `/api/PaymentDeadline/RegisterPatientInput`,data);
}

在我的Web API控制器中:

        [Route("RegisterPatientInput")]
        public SrvInvoiceCompositView[] RegisterGetPaymentDeadlineExtension(PatientInput data)
        {
            SrvInvoiceCompositView[] list = null;
            string ContractNo = String.Empty;
            string DktInvoiceNo = String.Empty;
            try
            {
                 ContractNo = data.BillNumber.Split('-')[0];
                 DktInvoiceNo = data.BillNumber.Split('-')[1];
                 list = DkService.SrvFindInvoiceCompositViewDentaPay(DktInvoiceNo, data.Amount, data.PatientNumber, ContractNo);


            }
            catch(Exception ex)
            {
                // exception to be returned to angular app.
            }

            return list;
        }

以及在我的component.ts文件中:

    this.homePageService.GetPaymentDeadlineExtension(this.input).subscribe(
      data=>
      {
        this.patientInfo = data;
      },
      error=>
      {
        //i want to get my ex.message here, so i can display it
      }
    )
javascript angular typescript
2个回答
0
投票
        this.homePageService.GetPaymentDeadlineExtension(this.input)
.pipe(catchError((error)=> { handleError here}).subscribe(
    data=>
    {
      this.patientInfo = data;
    }
  )

更多信息:https://www.learnrxjs.io/learn-rxjs/operators/error_handling/catch


0
投票

要在RxJS subscribe方法中出现错误,您必须返回一个没有2xx状态代码的http响应。例如,根据您的代码片段,错误请求(400)可能是一个不错的选择。因此,在.NET Core端,您需要按以下方式返回IActionResult

    [Route("RegisterPatientInput")]
    public IActionResult RegisterGetPaymentDeadlineExtension(PatientInput data)
    {
        SrvInvoiceCompositView[] list = null;
        string ContractNo = String.Empty;
        string DktInvoiceNo = String.Empty;
        try
        {
             ContractNo = data.BillNumber.Split('-')[0];
             DktInvoiceNo = data.BillNumber.Split('-')[1];
             list = DkService.SrvFindInvoiceCompositViewDentaPay(DktInvoiceNo, data.Amount, data.PatientNumber, ContractNo);
             return Ok(list); // This is has http status code 200 in the http response
        }
        catch(Exception ex)
        {
            return BadRequest(ex.Message); // This has http status code 400 in the http response
        }
    }

如果放入以下Angular Component文件:

this.homePageService.GetPaymentDeadlineExtension(this.input).subscribe(
  data=>
  {
    this.patientInfo = data;
  },
  error=>
  {
    console.log(error);
  }
)

http请求之后,您将能够从浏览器控制台的后端看到异常消息。

我不完全了解所开发软件的用例,但是不建议在生产的前端​​显示异常。黑客可能会从服务器代码中提取一些信息,从而导致故意的异常。

© www.soinside.com 2019 - 2024. All rights reserved.