¿Cómo redirigir desde OnActionExecuting en el controlador base?

He intentado de dos maneras: Response.Redirect () que no hace nada, así como llamar a un nuevo método dentro del Controlador base que devuelve un ActionResult y hacer que devuelva RedirectToAction () … ninguno de estos funciona.

¿Cómo puedo hacer una redirección desde el método OnActionExecuting?

public override void OnActionExecuting(ActionExecutingContext filterContext) { ... if (needToRedirect) { ... filterContext.Result = new RedirectResult(url); return; } ... } 

Se puede hacer de esta manera también:

 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 creas un controlador, llama a esta anotación como

 [RedirectingAction] public class TestController : Controller { public ActionResult Index() { return View(); } } 

Si el controlador redirigido hereda del mismo baseController donde reemplazamos el método OnActionExecuting causa un bucle recursivo. Supongamos que lo redirigimos a la acción de inicio de sesión del controlador de cuenta, luego la acción de inicio de sesión llamará OnActionExecuting método OnActionExecuting y se redirigirá a la misma acción de inicio de sesión una y otra vez … Entonces debemos aplicar un control en el método OnActionExecuting para verificar si la solicitud es del mismo Controlador si es así, entonces no lo redireccione de nuevo. aquí está el código:

anulación protegida.

 void OnActionExecuting(ActionExecutingContext filterContext) { try { some condition ... } catch { if (filterContext.Controller.GetType() != typeof(AccountController)) { filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Account" }, { "action", "Login" } }); } } }