MVC Framework - Filtres d'action

Dans ASP.NET MVC, les contrôleurs définissent des méthodes d'action et ces méthodes d'action ont généralement une relation un à un avec les contrôles d'interface utilisateur, comme cliquer sur un bouton ou un lien, etc. Par exemple, dans l'un de nos exemples précédents, le UserController classe contenait les méthodes UserAdd, UserDelete, etc.

Cependant, nous souhaitons souvent effectuer une action avant ou après une opération particulière. Pour atteindre cette fonctionnalité, ASP.NET MVC fournit une fonctionnalité permettant d'ajouter des comportements avant et après action sur les méthodes d'action du contrôleur.

Types de filtres

Le framework ASP.NET MVC prend en charge les filtres d'action suivants -

  • Action Filters- Les filtres d'action sont utilisés pour implémenter une logique qui est exécutée avant et après l'exécution d'une action de contrôleur. Nous examinerons les filtres d'action en détail dans ce chapitre.

  • Authorization Filters - Les filtres d'autorisation sont utilisés pour implémenter l'authentification et l'autorisation pour les actions du contrôleur.

  • Result Filters- Les filtres de résultat contiennent une logique qui est exécutée avant et après l'exécution d'un résultat de vue. Par exemple, vous souhaiterez peut-être modifier un résultat de vue juste avant que la vue ne soit rendue dans le navigateur.

  • Exception Filters- Les filtres d'exception sont le dernier type de filtre à exécuter. Vous pouvez utiliser un filtre d'exception pour gérer les erreurs générées par les actions de votre contrôleur ou par les résultats des actions du contrôleur. Vous pouvez également utiliser des filtres d'exception pour consigner les erreurs.

Les filtres d'action sont l'un des filtres les plus couramment utilisés pour effectuer un traitement de données supplémentaire, ou pour manipuler les valeurs de retour ou pour annuler l'exécution d'une action ou pour modifier la structure de la vue au moment de l'exécution.

Filtres d'action

Les filtres d'action sont des attributs supplémentaires qui peuvent être appliqués à une section de contrôleur ou à l'ensemble du contrôleur pour modifier la manière dont une action est exécutée. Ces attributs sont des classes .NET spéciales dérivées de System.Attribute qui peuvent être attachées à des classes, des méthodes, des propriétés et des champs.

ASP.NET MVC fournit les filtres d'action suivants -

  • Output Cache - Ce filtre d'action met en cache la sortie d'une action de contrôleur pendant une durée spécifiée.

  • Handle Error - Ce filtre d'action gère les erreurs générées lors de l'exécution d'une action de contrôleur.

  • Authorize - Ce filtre d'action vous permet de restreindre l'accès à un utilisateur ou à un rôle particulier.

Maintenant, nous allons voir l'exemple de code pour appliquer ces filtres sur un exemple de contrôleur ActionFilterDemoController. (ActionFilterDemoController n'est utilisé qu'à titre d'exemple. Vous pouvez utiliser ces filtres sur n'importe lequel de vos contrôleurs.)

Cache de sortie

Example - Spécifie la valeur de retour à mettre en cache pendant 10 secondes.

public class ActionFilterDemoController : Controller { 
   [HttpGet] 
   OutputCache(Duration = 10)] 
   
   public string Index() { 
      return DateTime.Now.ToString("T");  
   } 
}

Erreur de traitement

Example - Redirige l'application vers une page d'erreur personnalisée lorsqu'une erreur est déclenchée par le contrôleur.

[HandleError] 
public class ActionFilterDemoController : Controller { 
   
   public ActionResult Index() { 
      throw new NullReferenceException(); 
   }  
   
   public ActionResult About() { 
      return View(); 
   } 
}

Avec le code ci-dessus, si une erreur se produit pendant l'exécution de l'action, il trouvera une vue nommée Error dans le dossier Views et rendra cette page à l'utilisateur.

Autoriser

Example - Autoriser uniquement les utilisateurs autorisés à se connecter à l'application.

public class ActionFilterDemoController: Controller { 
   [Authorize] 
   
   public ActionResult Index() { 
      ViewBag.Message = "This can be viewed only by authenticated users only"; 
      return View(); 
   }  
   
   [Authorize(Roles="admin")] 
   public ActionResult AdminIndex() { 
      ViewBag.Message = "This can be viewed only by users in Admin role only"; 
      return View(); 
   } 
}

Avec le code ci-dessus, si vous essayez d'accéder à l'application sans vous connecter, une erreur similaire à celle illustrée dans la capture d'écran suivante sera générée.