private HttpResponseMessage BuildApiResponse(HttpRequestMessage request, HttpResponseMessage response) { object content; List <string> modelStateErrors = new List <string>(); //Step 2: Get the Response Content if (response.TryGetContentValue(out content) && !response.IsSuccessStatusCode) { HttpError error = content as HttpError; if (error != null) { //Step 3: If content is an error, return nothing for the Result. content = null; //We have errors, so don't return any content //Step 4: Insert the ModelState errors if (error.ModelState != null) { //Read as string var httpErrorObject = response.Content.ReadAsStringAsync().Result; //Convert to anonymous object var anonymousErrorObject = new { message = "", ModelState = new Dictionary <string, string[]>() }; // Deserialize anonymous object var deserializedErrorObject = JsonConvert.DeserializeAnonymousType(httpErrorObject, anonymousErrorObject); // Get error messages from ModelState object var modelStateValues = deserializedErrorObject.ModelState.Select(kvp => string.Join(". ", kvp.Value)); for (int i = 0; i < modelStateValues.Count(); i++) { modelStateErrors.Add(modelStateValues.ElementAt(i)); } } else { modelStateErrors.Add(error.FirstOrDefault().Value.ToString()); } } } //Step 5: Create a new response var newResponse = request.CreateResponse(response.StatusCode, new ResponsePackage(content, modelStateErrors)); //Step 6: Add Back the Response Headers foreach (var header in response.Headers) //Add back the response headers { newResponse.Headers.Add(header.Key, header.Value); } return(newResponse); }