【问题标题】:asp.net core & Angular & catchError: How to provide custom message via IActionResult?asp.net core & Angular & catchError: 如何通过 IActionResult 提供自定义消息?
【发布时间】:2019-07-13 00:50:39
【问题描述】:

我正在从 asp.net 核心以 ActionResult 的形式返回自定义错误消息,如下所示:

return NotFound(new { message = "Document file doesn't exist" });

但我看不到如何在角度拦截器中从 catchError 获取消息:

intercept(
    request: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    return next.handle(this.updateHeader(request)).pipe(
      catchError((err: HttpErrorResponse) => {

        // Try to refresh token or logout in case refresh wasn't successful
        if (err.status === 401) { ... }
...

错误对象如下所示:

error: Blob { size: 61, type: "application/json" }
​headers: Object { normalizedNames: Map(0), lazyUpdate: null, lazyInit: lazyInit() }
​message: "Http failure response for https://localhost:44357/api/documents/1121: 404 Not Found"
​name: "HttpErrorResponse"
​ok: false
​status: 404
​statusText: "Not Found"
​url: "https://localhost:44357/api/documents/1121"
​<prototype>: Object { ... }

【问题讨论】:

    标签: angular asp.net-core-webapi


    【解决方案1】:

    问题是当请求需要 blob 响应时 err.error 是一个 Blob,这似乎是一个 Angular 错误。因此解决方案是读取 blob 并解析包含的 JSON。类似的东西

    if (err.error instanceof Blob) {
        const reader = new FileReader();
    
        reader.addEventListener('loadend', (e) => {
            let result = e.srcElement['result'];
            let resultObject = JSON.parse(result);
            let errMsg = resultObject.message;
            this.translate
                .get(errMsg)
                .subscribe(text => this.toastr.error(text));
        });
        reader.readAsText(err.error);
    

    How to handle error for response Type blob in HttpRequest

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2019-01-03
      • 2018-08-16
      • 2014-01-13
      相关资源
      最近更新 更多