如何将错误数据添加到技术上不是例外的响应中?

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

在我的应用程序中,我正在抛出一个自定义异常。我的中间件将捕获该异常,并使用正确的状态代码和有用的错误响应发回响应

 public HttpStatusCodeExceptionMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext httpContext)
    {

       try
        {
            await _next(httpContext);
        }
        catch(HttpStatusCodeException ex)
        {
            httpContext.Response.Clear();
            httpContext.Response.StatusCode = ex.StatusCode;
            httpContext.Response.ContentType = ex.ContentType;

            // write to response body
            var errorObj = new { ErrorCode = ex.ErrorCode, Message = ex.Message };
            var serializedJsonError = JsonConvert.SerializeObject(errorObj);
            await httpContext.Response.WriteAsync(serializedJsonError);
        }
    }

这很好用,我可以看到网络请求中的响应以及状态代码。问题是我的前端应用程序(角度)没有看到catch块中的任何细节,因为我认为它在技术上不是一个例外。

我知道我可以做一些像ex.Data.Add(“Mykey”,“myValue”)这样的异常,但实际上没有返回异常对象;当我检查异常时,我可以看到所有值都是空的,并且由于状态代码,它可能只是显示为错误。

我该怎么做才能包含这些信息,以便我的前端应用可以查看详细信息?

这就是我目前要回来的:

{  
   "data":null,
   "status":-1,
   "config":{  
      "method":"DELETE",
      "transformRequest":[  
         null
      ],
      "transformResponse":[  
         null
      ],
      "jsonpCallbackParam":"callback",
      "headers":{  
         "Authorization":"Bearer REDACTED",
         "Accept":"application/json, text/plain, */*"
      },
      "url":"https://7ec106dd.ngrok.io/api/Cenpos/RecurringTokens/s"
   },
   "statusText":"",
   "xhrStatus":"error"
}
asp.net-core
1个回答
0
投票

您正在使用Clear(),这将阻止设置其他值。

(抱歉,简短的回答;我在移动设备上)

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