public static object CreateErrorResponse(object request, Exception ex, ResponseStatus responseStatus) { var responseDto = CreateResponseDto(request, responseStatus); var httpError = ex as IHttpError; if (httpError != null) { if (responseDto != null) httpError.Response = responseDto; return httpError; } var errorCode = ex.GetType().Name; var errorMsg = ex.Message; if (responseStatus != null) { errorCode = responseStatus.ErrorCode ?? errorCode; errorMsg = responseStatus.Message ?? errorMsg; } return new HttpError(responseDto, ex.ToStatusCode(), errorCode, errorMsg); }
// Encrypted Messaging Errors before keys can be extracted have to be written unencrypted private static void WriteUnencryptedError(IRequest req, Exception ex, string description = null) { var errorResponse = new ErrorResponse { ResponseStatus = ex.ToResponseStatus() }; var httpError = ex as IHttpError; req.Response.StatusCode = ex.ToStatusCode(); req.Response.StatusDescription = description ?? (httpError != null ? httpError.ErrorCode : ex.GetType().Name); req.Response.ContentType = MimeTypes.Json; req.Response.Write(errorResponse.ToJson()); req.Response.EndRequest(); }
protected void HandleException(string responseContentType, IHttpResponse httpRes, string operationName, Exception ex) { var errorMessage = string.Format("Error occured while Processing Request: {0}", ex.Message); Log.Error(errorMessage, ex); try { var statusCode = ex.ToStatusCode(); //httpRes.WriteToResponse always calls .Close in it's finally statement so //if there is a problem writing to response, by now it will be closed if (!httpRes.IsClosed) { httpRes.WriteErrorToResponse(responseContentType, operationName, errorMessage, ex, statusCode); } } catch (Exception writeErrorEx) { //Exception in writing to response should not hide the original exception Log.Info("Failed to write error to response: {0}", writeErrorEx); //rethrow the original exception throw ex; } finally { httpRes.EndServiceStackRequest(skipHeaders: true); } }
/// <summary> /// Global exception logging /// </summary> private object HandleException(IResolver iocResolver, object request, Exception ex) { return new HttpResult(ex.Message, (HttpStatusCode)ex.ToStatusCode()); }