77 votes

Obtenir le filtre redirection à l'action?

RedirectToAction est protégé et nous ne pouvons l'utiliser que dans les actions. Mais si je veux rediriger en filtre?

 public class IsGuestAttribute: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Ctx.User.IsGuest) 
            filterContext.Result = (filterContext.Controller as Controller)
                .RedirectToAction("Index", "Home");
    }
}
 

Quelque chose qui pourrait le faire fonctionner?

103voto

veggerby Points 5824

RedirectToAction est juste une méthode d'assistance pour construire une RedirectToRouteResult (). Vous créez donc simplement un nouveau RedirectToRouteResult () transmettant un RouteValueDictionary () avec des valeurs pour votre action.

[Edit] Exemple complet basé sur le code de @Domenic dans le commentaire ci-dessous

 public class IsGuestAttribute: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Ctx.User.IsGuest) 
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary 
                { 
                    { "controller", "Home" }, 
                    { "action", "Index" } 
                });
        }
    }
}
 

88voto

StuperUser Points 5514

Voici un exemple de code:

 public override void OnActionExecuting(ActionExecutingContext filterContext)
{

    if (!Ctx.User.IsGuest)
    {
        RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
        redirectTargetDictionary.Add("action", "Index");
        redirectTargetDictionary.Add("controller", "Home");

        filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X