¿Cómo redirigir desde OnActionExecuting en Base Controller?
Probé dos formas: Response.Redirect() que no hace nada, además de llamar a un nuevo método dentro del Controlador Base que devuelve un ActionResult y hace que devuelva RedirectToAction()... ninguno de estos funciona.
¿Cómo puedo hacer una redirección desde el método OnActionExecuting?
Aceptado
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
if (needToRedirect)
{
...
filterContext.Result = new RedirectResult(url);
return;
}
...
}
También se puede hacer de esta manera:
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{"controller", "Home"},
{"action", "Index"}
}
);
Crea una clase separada,
public class RedirectingAction : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
if (CheckUrCondition)
{
context.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Home",
action = "Index"
}));
}
}
}
Luego, cuando cree un controlador, llame a esta anotación como
[RedirectingAction]
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
}