protected ErrorTranslation CreateTranslation(HttpRequestMessage request, HttpStatusCode statusCode, Exception exception) { Error error = new Error(); Exception rootCause = exception.GetBaseException(); error.Problems.Add(new Error.Problem { Code = rootCause.GetType().Name, Message = MakeJsonSafe(rootCause.Message) }); HttpResponseMessage response = new HttpResponseMessage(statusCode) { Content = new StringContent(DefaultProtocol.Serializer.Serialize(error), Encoding.UTF8, "application/json") }; ErrorTranslation translation = new ErrorTranslation(error, response); return(translation); }
public ErrorTranslation Translate(Exception exception, HttpRequestMessage request) { ErrorTranslation translation = this.InternalTranslate(exception, request); if (translation == null) { if (this.InnerTranslator != null) { translation = this.InnerTranslator.Translate(exception, request); } } if (translation == null) { translation = this.CreateTranslation(request, HttpStatusCode.InternalServerError, exception); } return(translation); }
protected override ErrorTranslation InternalTranslate(Exception exception, HttpRequestMessage request) { if (exception is OperationNotAllowedException) { return(this.CreateTranslation(request, HttpStatusCode.BadRequest, exception)); } if (exception is ObjectNotFoundException) { return(this.CreateTranslation(request, HttpStatusCode.NotFound, exception)); } if (exception is ValidationException) { ErrorTranslation translation = this.CreateTranslation(request, HttpStatusCode.NotAcceptable, exception); ((ValidationException)exception).Errors.ForEach(e => translation.Error.Problems.Add(new Error.Problem { Message = e })); return(translation); } return(null); }