Je veux vérifier certaines choses sur l'état de la session, l'agent utilisateur, etc., et éventuellement prendre des mesures et renvoyer une vue spéciale AVANT qu'une méthode du contrôleur ait la possibilité de s'exécuter. Par exemple:
Le plus courant:
L'utilisateur demande Home/Index
Le système vérifie que x != 0.
x n'est pas égal à zéro, donc le contrôleur Home/Index s'exécute normalement.
Mais, parfois:
L'utilisateur demande Home/Index
Le système vérifie que x != 0.
x EST égal à zéro. L'utilisateur doit être informé et l'action du contrôleur demandée ne peut pas être autorisée à s'exécuter.
Je pense que cela implique l'utilisation de filtres d'actions. Mais j'ai lu à leur sujet et je ne comprends pas si je peux devancer la méthode du contrôleur et renvoyer une vue avant son exécution. Je suis sûr que je pourrais exécuter du code avant l'exécution de la méthode du contrôleur, mais comment l'empêcher de s'exécuter dans certains cas et de renvoyer une vue personnalisée, ou de rediriger vers une méthode de contrôleur différente?
Mise à jour: J'ai implémenté la solution de RM. Voici ce que j'ai fait:
public class MonAttribut : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (maValeur == mauvaiseValeur)
{
filterContext.Result = new ViewResult{ViewName = "Avis"};
}
base.OnActionExecuting(filterContext);
}
}
Maintenant, lorsque maValeur est incorrecte, ces utilisateurs obtiennent la vue Avis et le contrôleur demandé n'est jamais exécuté. Pour que cela fonctionne, je l'ai appliqué à un ControllerBase dont tous mes contrôleurs héritent.