/// <summary> /// Returns a string description of a controller action: /// for a ViewResult it renders the HTML, /// for a RedirectResult it returns the redirect-location /// </summary> /// <param name="actionResultToDescribe"> /// ActionResult to describe in some useful manner for diagnostics purposes in a log /// message /// </param> /// <param name="compressWhiteSpace"> /// If true (default) then consecutive whitespace characters are replaced by single whitespace /// </param> /// <returns></returns> public static string DescribeActionResultForLogging( ActionResult actionResultToDescribe, bool compressWhiteSpace = true) { if (null == actionResultToDescribe) { return("null ActionResult"); } try { if (actionResultToDescribe is ViewResult) { var fakeController = new DummyControllerForRendering(); string htmlContent = fakeController.RenderActionResultToString((ViewResult)actionResultToDescribe); if (compressWhiteSpace) { htmlContent = System.Text.RegularExpressions.Regex.Replace(htmlContent, @"\s+", " "); } return(htmlContent); } if (actionResultToDescribe is RedirectResult) { var rr = (RedirectResult)actionResultToDescribe; return($"Redirect to {rr.Url}"); } if (actionResultToDescribe is RedirectToRouteResult) { var rr = (RedirectToRouteResult)actionResultToDescribe; var fakeController = new DummyControllerForRendering(); var url = UrlHelper.GenerateUrl( rr.RouteName, null, null, rr.RouteValues, RouteTable.Routes, fakeController.ControllerContext.RequestContext, false); return($"Redirect to {url}"); } return($"{actionResultToDescribe.GetType().FullName} {actionResultToDescribe}"); } catch (Exception ex) { return($"Exception describing {actionResultToDescribe.GetType().FullName} : {ex}"); } }
/// <summary> /// Utility for Web-Forms apps to render an MVC ActionResult to the current response /// </summary> /// <param name="actionResult">MVC ActionResult to render / execute</param> /// <param name="httpContext">optional httpContext to override the default </param> public static void RenderActionResultToHttpContext(ActionResult actionResult, HttpContextBase httpContext = null) { var fakeController = new DummyControllerForRendering(); actionResult.ExecuteResult(fakeController.ControllerContext); }