Question

J'ai décoré mon contrôleur de base avec un couple de filtres d'action. Ils fonctionnent très bien.

L'un de ces filtres met en place la demande -. Fait des choses comme mettre la culture en fonction du domaine, etc

J'ai aussi une poignée d'actions qui requièrent une autorisation en utilisant l'attribut Autorisez.

Mon problème est que lorsqu'un utilisateur tente de demander une page, ils ne sont pas autorisés à accéder, le filtre entre d'autorisation et les redirige vers une page leur disant qu'ils ne peuvent pas rivaliser la page.

Le problème est que les filtres d'action fonctionnent jamais aussi la culture et d'autres données de demande ne sont jamais définies. Cela provoque effectivement la langue à tort dans la vue et d'autres données à manquer.

Je sais que les filtres d'autorisation fonctionnent d'abord, mais ma question est la suivante: Comment puis-je concevoir ce tel que je peux faire en sorte que certaines méthodes sont toujours gérées avant que la vue est retourné, quelle que soit l'autorisation

.

L'espoir qui fait sens.

Était-ce utile?

La solution

Selon cette (sous l'en-tête de l'ordre des filtres), autorisation filtres de toujours courir avant les filtres d'action. Cela signifie que déconner avec des propriétés de Order ne va pas aider.

Je pense que la meilleure façon de gérer est d'écrire votre propre attribut d'autorisation (par AuthorizeAttribute et AuthorizeCore le sous-classement prioritaire) et l'exécution de votre filtre manuellement l'action en cas d'échec d'autorisation.

Autres conseils

Voir Ordre d'exécution pour les filtres d'action MSDN article sur l'action de filtre

En gros, vous pouvez fournir une propriété Order sur les filtres de culture pour qu'il fonctionne avant le filtre d'autorisation, quelque chose comme ceci:

[CultureRedirect(Order = 1)]
public class MyBaseController : Controller { }

[Authorize(Order = 2)]
public class RequiresAuth : MyBaseController { }

...

Si cela échoue, vous pouvez toujours Exécuter du code bfore une action exécute et avant toute ActionFilter sera exécutée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top