public static Task WriteErrorToResponse(this IResponse httpRes, IRequest httpReq, string contentType, string operationName, string errorMessage, Exception ex, int statusCode) { var errorDto = ex.ToErrorResponse(); HostContext.OnExceptionTypeFilter(ex, errorDto.ResponseStatus); if (HandleCustomErrorHandler(httpRes, httpReq, contentType, statusCode, errorDto)) { return(EmptyTask); } if (httpRes.ContentType == null || httpRes.ContentType == MimeTypes.Html) { httpRes.ContentType = contentType; } if (HostContext.Config.AppendUtf8CharsetOnContentTypes.Contains(contentType)) { httpRes.ContentType += ContentFormat.Utf8Suffix; } var hold = httpRes.StatusDescription; var hasDefaultStatusDescription = hold == null || hold == "OK"; httpRes.StatusCode = statusCode; if (hasDefaultStatusDescription) { if (errorMessage != null) { httpRes.StatusDescription = errorMessage; } } else { httpRes.StatusDescription = hold; } var serializer = HostContext.ContentTypes.GetResponseSerializer(contentType); if (serializer != null) { serializer(httpReq, errorDto, httpRes); } httpRes.EndHttpHandlerRequest(skipHeaders: true); return(EmptyTask); }
/// <summary> /// /// </summary> /// <param name="iocResolver"></param> /// <param name="request"></param> /// <param name="ex"></param> /// <returns></returns> public static object CreateErrorResponse(object request, Exception ex) { ex = HostContext.AppHost.ResolveResponseException(ex); var responseStatus = ex.ToResponseStatus(); if (HostContext.DebugMode) { // View stack trace in tests and on the client responseStatus.StackTrace = GetRequestErrorBody(request) + "\n" + ex; } Log.Error("ServiceBase<TRequest>::Service Exception", ex); var errorResponse = CreateErrorResponse(request, ex, responseStatus); HostContext.OnExceptionTypeFilter(ex, responseStatus); return(errorResponse); }
/// <summary> /// /// </summary> /// <param name="iocResolver"></param> /// <param name="request"></param> /// <param name="ex"></param> /// <returns></returns> public static object CreateErrorResponse(object request, Exception ex) { if (HostContext.Config.ReturnsInnerException && ex.InnerException != null && !(ex is IHttpError)) { ex = ex.InnerException; } var responseStatus = ex.ToResponseStatus(); if (HostContext.DebugMode) { // View stack trace in tests and on the client responseStatus.StackTrace = GetRequestErrorBody(request) + "\n" + ex; } Log.Error("ServiceBase<TRequest>::Service Exception", ex); var errorResponse = CreateErrorResponse(request, ex, responseStatus); HostContext.OnExceptionTypeFilter(ex, responseStatus); return(errorResponse); }