private async Task WriteExceptionToResponse(Exception ex, HttpContext httpContext)
        {
            var responseVM = new BaseResponseVm(ex);

            if (ex is WebImpactExternalResourceException externalException)
            {
                if (externalException.WebImpactDebugInfo is BaseResponseVm webImpactResponse)
                {
                    responseVM.SystemErrorMessage += "/////" + webImpactResponse.SystemErrorMessage;
                    responseVM.SystemErrorStack   += "/////" + webImpactResponse.SystemErrorStack;
                    responseVM.SystemMessage      += "/////" + webImpactResponse.SystemMessage;
                    responseVM.Result              = webImpactResponse.Result;
                }
                else
                {
                    responseVM.SystemMessage = JsonConvert.SerializeObject(externalException.WebImpactDebugInfo, new JsonSerializerSettings {
                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                    });
                }

                responseVM.DebugInfo = new
                {
                    Request  = externalException.RequestData,
                    Response = externalException.WebImpactDebugInfo
                };
            }

            // httpContext.Response.Clear(); // Do not clear headers to support CORS

            var calculatedStatusCode = StatusCodeHelper.GetIntStatusCodeForResponse(responseVM);

            if (httpContext.Response.StatusCode != calculatedStatusCode)
            {
                httpContext.Response.StatusCode = calculatedStatusCode;
            }

            httpContext.Response.ContentType = "application/json";

            var response = JsonConvert.SerializeObject(responseVM, _jsonSettings);

            await httpContext.Response.WriteAsync(response);
        }
Пример #2
0
 public static int GetIntStatusCodeForResponse(BaseResponseVm response)
 {
     return((int)_statusMap[response.Result]);
 }
Пример #3
0
 protected ActionResult <BaseResponseVm> ResponseTyped(BaseResponseVm response)
 {
     return(this.RespInnerTyped(response));
 }
Пример #4
0
 public static HttpStatusCode GetStatusCodeForResponse(BaseResponseVm response)
 {
     return(_statusMap[response.Result]);
 }