¿Cómo redirigir desde OnActionExecuting en Base Controller?

Resuelto MetaGuru asked hace 14 años • 4 respuestas

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?

MetaGuru avatar Jul 09 '10 23:07 MetaGuru
Aceptado
 public override void OnActionExecuting(ActionExecutingContext filterContext)
 {
    ...
    if (needToRedirect)
    {
       ...
       filterContext.Result = new RedirectResult(url);
       return;
    }
    ...
 }
womp avatar Jul 09 '2010 16:07 womp

También se puede hacer de esta manera:

filterContext.Result = new RedirectToRouteResult(
    new RouteValueDictionary
    {
        {"controller", "Home"},
        {"action", "Index"}
    }
);
Randy Burden avatar Aug 22 '2011 21:08 Randy Burden

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();
    }
}
K.Kirivarnan avatar Dec 13 '2011 10:12 K.Kirivarnan