public override void OnActionExecuted(ActionExecutedContext actionExecutedContext) { if (actionExecutedContext.Exception != null && !actionExecutedContext.ExceptionHandled) { var error = new KeyValuePair <string, List <string> >("internal_server_error", new List <string>() { "please, contact the store owner" }); actionExecutedContext.Exception = null; actionExecutedContext.ExceptionHandled = true; SetError(actionExecutedContext, error); } else if (actionExecutedContext.HttpContext.Response != null && (HttpStatusCode)actionExecutedContext.HttpContext.Response.StatusCode != HttpStatusCode.OK) { string responseBody = string.Empty; using (var streamReader = new StreamReader(actionExecutedContext.HttpContext.Response.Body)) { responseBody = streamReader.ReadToEnd(); } // reset reader possition. actionExecutedContext.HttpContext.Response.Body.Position = 0; DefaultWeApiErrorsModel defaultWebApiErrorsModel = JsonConvert.DeserializeObject <DefaultWeApiErrorsModel>(responseBody); // If both are null this means that it is not the default web api error format, // which means that it the error is formatted by our standard and we don't need to do anything. if (!string.IsNullOrEmpty(defaultWebApiErrorsModel.Message) && !string.IsNullOrEmpty(defaultWebApiErrorsModel.MessageDetail)) { var error = new KeyValuePair <string, List <string> >("lookup_error", new List <string>() { "not found" }); SetError(actionExecutedContext, error); } } base.OnActionExecuted(actionExecutedContext); }
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { if (actionExecutedContext.Response != null && actionExecutedContext.Response.StatusCode != HttpStatusCode.OK) { var content = actionExecutedContext.Response.Content.ReadAsStringAsync().Result; DefaultWeApiErrorsModel defaultWebApiErrorsModel = JsonConvert.DeserializeObject <DefaultWeApiErrorsModel>(content); // If both are null this means that it is not the default web api error format, // which means that it the error is formatted by our standard and we don't need to do anything. if (!string.IsNullOrEmpty(defaultWebApiErrorsModel.Message) && !string.IsNullOrEmpty(defaultWebApiErrorsModel.MessageDetail)) { Dictionary <string, List <string> > bindingError = new Dictionary <string, List <string> >() { { "lookup_error", new List <string>() { "not found" } } }; var errorsRootObject = new ErrorsRootObject() { Errors = bindingError }; var errorJson = _jsonFieldsSerializer.Serialize(errorsRootObject, null); actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse( HttpStatusCode.BadRequest, errorJson); } } base.OnActionExecuted(actionExecutedContext); }