Quelle est la meilleure façon de faire une redirection dans un fichier ActionFilterAttribute
. J'ai un ActionFilterAttribute
appelé IsAuthenticatedAttributeFilter
et qui a vérifié la valeur d'une variable de session. Si la variable est fausse, je souhaite que l'application soit redirigée vers la page de connexion. Je préférerais rediriger en utilisant le nom de la route, SystemLogin
mais toute méthode de redirection à ce stade conviendrait.
c#
asp.net-mvc
asp.net-mvc-3
redirect
routes
Ryanzec
la source
la source
Réponses:
Définir filterContext.Result
Avec le nom de l'itinéraire:
Vous pouvez également faire quelque chose comme:
Si vous souhaitez utiliser
RedirectToAction
:Vous pouvez créer une
RedirectToAction
méthode publique sur votre contrôleur (de préférence sur son contrôleur de base ) qui appelle simplement le protectedRedirectToAction
fromSystem.Web.Mvc.Controller
. L'ajout de cette méthode permet un appel public à votreRedirectToAction
depuis le filtre.Ensuite, votre filtre ressemblerait à quelque chose comme:
la source
protected
que vous n'y ayez pas accès à partir du filtre.protected
il doit y avoir une explication raisonnable? Je me sens très sale de redéfinir cette accessibilitéRedirectToAction
sans comprendre pourquoi elle a été encapsulée en premier lieu.Alternativement à une redirection, si elle appelle votre propre code, vous pouvez utiliser ceci:
Ce n'est pas une pure redirection mais donne un résultat similaire sans surcharge inutile.
la source
actionContext.Result.ExecuteResult
partir de votre filtre d'action - MVC le fera automatiquement après l'exécution du filtre d'action (fourniactionContext.Result
n'est pas nul).J'utilise MVC4, j'ai utilisé l'approche suivante pour rediriger un écran HTML personnalisé en cas de violation d'autorisation.
Prolonger
AuthorizeAttribute
direCutomAuthorizer
remplacer leOnAuthorization
etHandleUnauthorizedRequest
Enregistrez le
CustomAuthorizer
dans leRegisterGlobalFilters
.lors de l'identification de l'
unAuthorized
appel d'accèsHandleUnauthorizedRequest
et rediriger vers l'action du contrôleur concerné comme indiqué ci-dessous.la source
On dirait que vous voulez ré-implémenter, ou peut - être prolonger,
AuthorizeAttribute
. Si tel est le cas, vous devez vous assurer que vous héritez de cela, et nonActionFilterAttribute
, afin de laisser ASP.NET MVC faire plus de travail pour vous.En outre, vous voulez vous assurer que vous autorisez avant de faire tout le travail réel dans la méthode d'action - sinon, la seule différence entre connecté et non sera la page que vous voyez lorsque le travail est terminé.
Il y a une bonne question avec une réponse avec plus de détails ici sur SO.
la source
Essayez l'extrait de code suivant, cela devrait être assez clair:
la source
Voici une solution qui prend également en compte si vous utilisez des requêtes Ajax.
la source
Cela fonctionne pour moi (asp.net core 2.1)
la source
vous pouvez hériter de votre contrôleur puis l'utiliser dans votre filtre d'action
dans votre classe ActionFilterAttribute:
à l'intérieur de votre contrôleur de base:
Les inconvénients. de ceci est de changer tous les contrôleurs pour hériter de la classe "MyController"
la source