I f el controlador redirigido hereda del mismo baseController
donde reemplazamos el método OnActionExecuting
porque causa un bucle recursivo. Supongamos que redirigirlo a iniciar sesión acción del controlador de la cuenta, entonces la acción de acceso llamará OnActionExecuting
método y redirige a la misma acción de acceso y otra vez ... Por lo tanto, debe aplicarse una marca en OnActionExecuting
método para comprobar capear la solicitud procede de la mismo controlador, si es así, no redirija su acción de inicio de sesión nuevamente. Aquí está el código:
protected override.
void OnActionExecuting(ActionExecutingContext filterContext)
{
try
{
some condition ...
}
catch
{
if (filterContext.Controller.GetType() != typeof(AccountController))
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Account" }, { "action", "Login" } });
}
}
}
En lugar de 'new RedirectResult (url)', también podría usar 'new RedirectToAction (string action, string controller)'. Esto puede haber sido agregado a MVC después de haber publicado su respuesta. Tu solución me puso en el camino correcto de todos modos. – Manfred
+1000 ¡Gracias! – IamStalker
¿De esta manera no ejecutará lo que está en su acción actual? ¿No sería esto un defecto de seguridad? Digamos que hay una acción que elimina un usuario enrutado por/Admin/Delete/4. Si su condición es verificar que usted es un administrador, y redirigir si no es así. El usuario 4 será eliminado, incluso si usted termina redirigido, ¿correcto? – Pluc