2010-10-29 3 views
3

J'ai actuellement 2 filtres, Auth et Redirect qui font ce qui suit: Filter Auth, qui implémente IAuthorizationFilter et ActionFilter, vérifie la connexion et l'autorisation de l'utilisateur, et si cela échoue, filterContext.Result est un HttpStatusCodeResult de 403 (interdit) . Filter Redirect, qui implémente IActionFilter et ActionFilter, vérifie le résultat et s'il s'agit d'un 403, redirige vers une page de connexion.Filtres d'action ASP.NET MVC: La définition de filterContext.Result dans un filtre empêche l'exécution d'autres filtres?

je les ai appliquées à une action comme suit:

[Auth(Order=0)] 
[Redirect(Order=1)] 

Cependant, Auth est exécuté, mais jamais Redirect est exécuté (pas l'un des 4 méthodes qu'il fournit dérogation possible). Si je supprime Auth Redirect est exécuté, mais si j'inclue Auth comme premier filtre, Redirect n'est pas exécuté. Je suppose que la définition de la propriété Result du contexte de filtre empêche l'exécution de tous les autres filtres, mais je n'arrive pas à comprendre pourquoi cela se produit. Pour info, j'utilise ASP.NET MVC 3 beta, mais cela ne devrait rien changer. Mise à jour: La modification du type de filtre d'Auth à IActionFilter au lieu de IAuthorizationFilter entraîne l'exécution de OnResultExecuting et de OnResultExecuted dans Redirect, mais la modification de la réponse n'a aucun effet sur la réponse finale au navigateur.

Répondre

2

Je fini par fixer en faisant Rediriger un IResultFilter et écrit ce qui suit dans OnResultExecuting:

filterContext.HttpContext.Response.Redirect(url); 
0

Lorsque vous définissez HttpStatusCodeResult, vous définissez une redirection, le second filtre ne s'exécute donc pas (car vous l'avez déjà redirigé).

+0

un HttpStatusCodeResult ne finit pas par être une redirection, il dit simplement ASP.NET MVC pour servir une réponse à le code d'état spécifié. – Diego