public void ProvideFault(Exception error, MessageVersion version, ref Message fault) { HttpStatusCode statusCode; if (error is SecurityAccessDeniedException) { statusCode = HttpStatusCode.Unauthorized; } else if (error is ServerTooBusyException) { statusCode = HttpStatusCode.ServiceUnavailable; } else if (CheckIsBizException(error.GetType())) { statusCode = HttpStatusCode.OK; } else { statusCode = HttpStatusCode.InternalServerError; } RestServiceError errorData = new RestServiceError() { StatusCode = (int)statusCode, StatusDescription = HttpWorkerRequest.GetStatusDescription((int)statusCode), Faults = new List <Error>() }; if (CheckIsBizException(error.GetType())) { errorData.Faults.Add(new Error() { ErrorCode = "11111", ErrorDescription = error.Message }); } else { string show = ConfigurationManager.AppSettings["ShowErrorDetail"]; bool showDetail = false; bool tmp; if (!string.IsNullOrWhiteSpace(show) && bool.TryParse(show, out tmp)) { showDetail = tmp; } errorData.Faults.Add(new Error() { ErrorCode = "00000", ErrorDescription = showDetail ? error.ToString() : "SYSTEM EXCEPTION" }); } if (version == MessageVersion.None) { WebMessageFormat messageFormat = WebOperationContext.Current.OutgoingResponse.Format ?? WebMessageFormat.Xml; WebContentFormat contentFormat = WebContentFormat.Xml; string contentType = "text/xml"; if (messageFormat == WebMessageFormat.Json) { contentFormat = WebContentFormat.Json; contentType = "application/json"; } WebBodyFormatMessageProperty bodyFormat = new WebBodyFormatMessageProperty(contentFormat); HttpResponseMessageProperty responseMessage = new HttpResponseMessageProperty(); responseMessage.StatusCode = HttpStatusCode.OK; responseMessage.StatusDescription = HttpWorkerRequest.GetStatusDescription((int)responseMessage.StatusCode); responseMessage.Headers[HttpResponseHeader.ContentType] = contentType; responseMessage.Headers["X-HTTP-StatusCode-Override"] = "500"; fault = Message.CreateMessage(MessageVersion.None, null, new RestServiceErrorWriter() { Error = errorData, Format = contentFormat }); fault.Properties[WebBodyFormatMessageProperty.Name] = bodyFormat; fault.Properties[HttpResponseMessageProperty.Name] = responseMessage; } }
public void ProvideFault(Exception error, MessageVersion version, ref Message fault) { HttpStatusCode statusCode; if (error is SecurityAccessDeniedException) { statusCode = HttpStatusCode.Unauthorized; } else if (error is ServerTooBusyException) { statusCode = HttpStatusCode.ServiceUnavailable; } else if (CheckIsBizException(error.GetType())) { statusCode = HttpStatusCode.OK; } else { statusCode = HttpStatusCode.InternalServerError; } RestServiceError errorData = new RestServiceError() { StatusCode = (int)statusCode, StatusDescription = HttpWorkerRequest.GetStatusDescription((int)statusCode), Faults = new List<Error>() }; if (CheckIsBizException(error.GetType())) { errorData.Faults.Add(new Error() { ErrorCode = "11111", ErrorDescription = error.Message }); } else { string show = ConfigurationManager.AppSettings["ShowErrorDetail"]; bool showDetail = false; bool tmp; if (!string.IsNullOrWhiteSpace(show) && bool.TryParse(show, out tmp)) { showDetail = tmp; } errorData.Faults.Add(new Error() { ErrorCode = "00000", ErrorDescription = showDetail ? error.ToString() : "SYSTEM EXCEPTION" }); } if (version == MessageVersion.None) { WebMessageFormat messageFormat = WebOperationContext.Current.OutgoingResponse.Format ?? WebMessageFormat.Xml; WebContentFormat contentFormat = WebContentFormat.Xml; string contentType = "text/xml"; if (messageFormat == WebMessageFormat.Json) { contentFormat = WebContentFormat.Json; contentType = "application/json"; } WebBodyFormatMessageProperty bodyFormat = new WebBodyFormatMessageProperty(contentFormat); HttpResponseMessageProperty responseMessage = new HttpResponseMessageProperty(); responseMessage.StatusCode = HttpStatusCode.OK; responseMessage.StatusDescription = HttpWorkerRequest.GetStatusDescription((int)responseMessage.StatusCode); responseMessage.Headers[HttpResponseHeader.ContentType] = contentType; responseMessage.Headers["X-HTTP-StatusCode-Override"] = "500"; fault = Message.CreateMessage(MessageVersion.None, null, new RestServiceErrorWriter() { Error = errorData, Format = contentFormat }); fault.Properties[WebBodyFormatMessageProperty.Name] = bodyFormat; fault.Properties[HttpResponseMessageProperty.Name] = responseMessage; } }