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 );
}