private HttpResponseMessage Execute() { var httpResponseMessage = new HttpResponseMessage(); try { var negotiationResult = ContentNegotiator.Negotiate(typeof(HttpError), Request, Formatters); if (negotiationResult == null) { httpResponseMessage.StatusCode = HttpStatusCode.NotAcceptable; } else { var error = new HttpError("Internal Server Error"); foreach (var property in Exception.GetCustomProperties()) { error.Add(property.Key, property.Value); } httpResponseMessage.StatusCode = HttpStatusCode.InternalServerError; httpResponseMessage.Content = new ObjectContent <HttpError>(error, negotiationResult.Formatter, negotiationResult.MediaType); } httpResponseMessage.RequestMessage = Request; } catch { httpResponseMessage.Dispose(); throw; } return(httpResponseMessage); }
/// Creates an HttpResponseMessage instance asynchronously. This method determines how a HttpResponseMessage content will look like. public override Task <HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { var result = ContentNegotiator.Negotiate(typeof(HttpError), Request, Formatters); var message = new HttpResponseMessage { RequestMessage = Request, StatusCode = result != null ? HttpStatusCode.InternalServerError : HttpStatusCode.NotAcceptable, }; if (result != null) { string alert = null; if (Exception is SqlException) { // Strip the beginning of the exception message which contains the name of the stored procedure and the argument values. We do not disclose the values to the client. var index = Exception.Message.IndexOf("::"); // The magic separator used within our stored procedures. if (index >= 0) { alert = Exception.Message.Substring(index + 2).Trim(); } } else if (Exception is UserAlertException) { alert = Exception.Message; } // Until we have converted all the exceptions thrown by our code to UserAlertException else { alert = Exception.Message; } var content = new HttpError(Exception, IncludeErrorDetail); if (!String.IsNullOrEmpty(alert)) { // Define an additional content field. content.Add("Alert", alert); } // serializes the HttpError instance either to JSON or to XML depend on requested by the client MIME type. message.Content = new ObjectContent <HttpError>(content, result.Formatter, result.MediaType); } return(Task.FromResult(message)); }
private HttpResponseMessage Execute() { var httpResponseMessage = new HttpResponseMessage(); try { var negotiationResult = ContentNegotiator.Negotiate(typeof(HttpError), Request, Formatters); if (negotiationResult == null) { httpResponseMessage.StatusCode = HttpStatusCode.NotAcceptable; } else { var error = new HttpError("Validation Failed"); foreach (var err in _exception.ValidationErrors) { if (!error.ContainsKey(err.ItemName)) { error.Add(err.ItemName, new Collection <ApiError>()); } ((ICollection <ApiError>)error[err.ItemName]).Add(new ApiError { ErrorCode = err.ErrorCode, Message = err.ErrorMessage }); } httpResponseMessage.StatusCode = HttpStatusCode.BadRequest; httpResponseMessage.Content = new ObjectContent <HttpError>(error, negotiationResult.Formatter, negotiationResult.MediaType); } httpResponseMessage.RequestMessage = Request; } catch { httpResponseMessage.Dispose(); throw; } return(httpResponseMessage); }