BarNapkin.Infrastructure.WebUI.Filters.Errors.RedirectToActionOnErrorAttribute.Redirect C# (CSharp) Method

Redirect() protected method

protected Redirect ( System.Web.Mvc.ActionExecutedContext filterContext ) : void
filterContext System.Web.Mvc.ActionExecutedContext
return void
        protected override void Redirect(ActionExecutedContext filterContext)
        {
            //Turn "Foo.Foo.Foo.BarController" into "Bar"
            string controllerName = Controller.ToString();
            controllerName = controllerName.Substring(controllerName.LastIndexOf(".") + 1);
            controllerName = controllerName.Substring(0, controllerName.LastIndexOf("Controller"));

            //turn route identity into url
            RouteValueDictionary rvd = new RouteValueDictionary(
                new
                {
                    controller = controllerName,
                    action = Action
                });

            ControllerContext ctx = new ControllerContext(
                filterContext.HttpContext,
                filterContext.RouteData,
                filterContext.Controller
                );

            VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(ctx.RequestContext, rvd);
            string url = vpd.VirtualPath;

            //Redirect
            PlaceInItemDictionary("Error", filterContext.Exception, filterContext);
            PlaceInItemDictionary("Controller", filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, filterContext);
            PlaceInItemDictionary("Action", filterContext.ActionDescriptor.ActionName, filterContext);

            filterContext.ExceptionHandled = true;
            var transferResult = new TransferResult(url);
            transferResult.ExecuteResult(filterContext.Controller.ControllerContext);
            //filterContext.HttpContext.Server.Transfer( url, true );
        }