Redirection À Partir De L'Action Du Filtre D'Attribut
Quel est le meilleur moyen de faire une redirection en un ActionFilterAttribute
. J'ai un ActionFilterAttribute
appelé IsAuthenticatedAttributeFilter
et qui a vérifié la valeur d'une variable de session. Si la variable est faux, je veux de l'application pour rediriger vers la page de connexion. Je préfère de redirection en utilisant le nom de la route SystemLogin
cependant, toute méthode de redirection à ce point, ce serait bien.
Vous devez vous connecter pour publier un commentaire.
Ensemble filterContext.Résultat
Avec le nom de la route:
Vous pouvez aussi faire quelque chose comme:
Si vous souhaitez utiliser
RedirectToAction
:Vous pourriez faire un public
RedirectToAction
méthode sur votre contrôleur (de préférence sur sa base de contrôleur de) qui appelle simplement le protégéRedirectToAction
deSystem.Web.Mvc.Controller
. L'ajout de cette méthode permet d'appel public à votreRedirectToAction
du filtre.Puis votre filtre ressemblerait à quelque chose comme:
protected
de sorte que vous n'avez pas accès à la pompe du filtre.protected
il doit y avoir une explication raisonnable? Je me sens très sale, la redéfinition de cette accessibilité deRedirectToAction
sans comprendre pourquoi il a été encapsulé dans la première place.Alternativement à une redirection, si elle est d'appeler votre propre code, vous pouvez utiliser ceci:
Il n'est pas un pur redirection, mais donne un résultat similaire sans surcharge inutile.
actionContext.Result.ExecuteResult
à partir de votre action de filtre - MVC fera automatiquement après l'action de l'exécution du filtre (fourniactionContext.Result
n'est pas nulle).Je suis en utilisant MVC4, j'ai utilisé la méthode suivante pour rediriger un code html personnalisé à l'écran au moment de l'autorisation de la violation.
Étendre
AuthorizeAttribute
direCutomAuthorizer
remplacer le
OnAuthorization
etHandleUnauthorizedRequest
Enregistrer le
CustomAuthorizer
dans leRegisterGlobalFilters
.sur l'identification de la
unAuthorized
accès appelerHandleUnauthorizedRequest
et rediriger à l'action du contrôleur comme indiqué ci-dessous.Il semble que vous voulez re-mettre en œuvre, ou, éventuellement, de proroger, de
AuthorizeAttribute
. Si oui, vous devriez assurez-vous que vous héritez, et à ne pasActionFilterAttribute
, afin de laisser ASP.NET MVC faire plus de travail pour vous.Aussi, vous voulez vous assurer que vous autorisez avant vous faire tout le travail réel dans la méthode de l'action - dans le cas contraire, la seule différence entre connecté et pas de ce que la page que vous voyez lorsque le travail est effectué.
Il y a une bonne question avec un réponse avec plus de détails ici sur DONC.
Essayez l'extrait suivant, il devrait être assez clair:
Voici une solution qui prend également en compte si vous utilisez des requêtes Ajax.
vous pourriez hériter de votre contrôleur, puis l'utiliser à l'intérieur de votre filtre d'actions
à l'intérieur de votre ActionFilterAttribute classe:
à l'intérieur de votre base de contrôleur:
Cons. de ce qui est à changer tous les contrôleurs à hériter de "MyController" classe
Cela fonctionne pour moi (asp.net de base 2.1)