/// <summary> /// Convert the status code, content of HttpResponseMessage to IActionResult, /// and copy the headers from response to HttpContext.Response.Headers. /// </summary> /// <param name="controller">The HttpResponse instance.</param> /// <param name="responseMessage">The HttpResponseMessage instance.</param> /// <returns>The action result.</returns> public static async Task <IActionResult> GetActionResultAsync(this Controller controller, HttpResponseMessage responseMessage) { controller.CopyResponseHeaders(responseMessage.Headers); var statusCode = (int)responseMessage.StatusCode; if (responseMessage.Content == null) { return(controller.StatusCode(statusCode)); } else { var responseBody = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); return(controller.StatusCode(statusCode, responseBody)); } }
/// <summary> /// Convert exception to action result. /// </summary> /// <param name="controller">The controller.</param> /// <param name="exception">The exception.</param> /// <returns>The action result.</returns> public static IActionResult Exception(this Controller controller, Exception exception) { IActionResult result; if (exception is ServiceException e) { controller.CopyResponseHeaders(e.ResponseHeaders); int statusCode = (int)e.StatusCode; result = statusCode >= 300 ? controller.StatusCode(statusCode, e.ToString()) : controller.StatusCode((int)HttpStatusCode.InternalServerError, e.ToString()); } else { result = controller.StatusCode((int)HttpStatusCode.InternalServerError, exception.ToString()); } return(result); }