retornar - redirect to action mvc c#
¿Cómo redirigir desde OnActionExecuting en el controlador base? (4)
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?
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();
}
}
Se puede hacer de esta manera también:
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{{"controller", "Home"}, {"action", "Index"}});
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" } });
}
}
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
if (needToRedirect)
{
...
filterContext.Result = new RedirectResult(url);
return;
}
...
}