首页 > 解决方案 > 使用角度上传数组:如何从后端获取错误?

问题描述

我有一个非常简单的 Angular 应用程序,它使用 post 向后端/服务器(用 C# 编写的 MS AspNetCore 应用程序)发送一个字符串列表(仅对于这个例子,实际上它是一个称为协议的更复杂数据的列表)方法。此功能运行良好,但由于我对 angular 非常陌生,因此在此过程中我很难处理发生在服务器端的故障。如果出现问题,我想在客户端显示错误消息。

这是我到目前为止通过定位角度教程构建的内容: 角度component.ts文件基本上有一个上传方法:

constructor(
    private readonly SVC: UploadService) { }

uploadStringlist(): void {
    let sarray: string[] = [];

    sarray.push("string1");
    sarray.push("string2");

    this.SVC.uploadList(sarray).subscribe(
     _ => { this.finished,emit(`protocols sent: next`)},
     err => { this.finished.emit(`Protocols sent: error` + err)},
     () => { this.finished.emit(`Protocols sent`)});
}

upload.service.ts文件基本上有这个方法:

uploadList(slist: string[]): Observable<string> {
  return this.http.post<string>(apiurl, slist, httpOptions)
    .pipe(
      tap(res => log("uploaded protocol list to server", res)),
      catchError(handleError<string>("test")));
}

管道只是为了完整性(我不想从原始代码中过多地更改我的示例)

所以在服务器端只有这个uploadController:

[HttpPost]
public IActionResult Post(string[] slist)
{
    foreach (var s in slist)
    {
       // do something
    }

    return StatusCode(409);
    //return Ok();
}

所以,无论我在控制器上返回什么,我都会在客户端得到相同的结果。这意味着我得到了结果:“协议已发送”。

但理想情况下,如果我在控制器中返回错误,我会得到一个结果列表(字符串数组中的每个条目一个)或者至少一个错误。但我不知道如何实现这一目标。

标签: c#angulartypescript

解决方案


查看错误的方法之一是抛出exception,例如:

throw new ArgumentException("Something bad happened.");

此外,对于 Web API 项目,请确保您已从web.config文件中打开错误报告(但在投入生产时将其关闭):

<system.web>
    <customErrors mode="Off" />
</system.web>

推荐阅读