Sobes.tech
Middle

Qu'est-ce qu'un filtre d'action et quelles fonctions remplit-il?

sobes.tech IA

Réponse de l'IA

Les filtres d'action dans ASP.NET Core sont un type spécifique de filtres qui interceptent l'exécution de la méthode d'action du contrôleur.

Fonctions principales :

  • Avant l'exécution de l'action : Exécutent du code avant que la méthode d'action du contrôleur ne soit appelée (OnActionExecuting).
  • Après l'exécution de l'action : Exécutent du code après que la méthode d'action du contrôleur a été appelée, mais avant que le résultat ne soit formaté (OnActionExecuted).
  • Modification du contexte : Peuvent modifier le contexte d'exécution de l'action (ActionExecutingContext) ou le contexte après exécution (ActionExecutedContext), par exemple en ajoutant des données dans HttpContext.Items, en modifiant le routage ou en définissant le résultat de l'action.
  • Gestion des exceptions : Ne gèrent pas directement les exceptions, mais peuvent être utilisés pour définir un résultat d'erreur si une exception s'est produite lors de OnActionExecuting.

Exemples d'utilisation :

  • Validation des données de la requête avant l'appel de l'action.
  • Ajout d'en-têtes ou modification du corps de la réponse.
  • Enregistrement d'informations sur la requête et la réponse.
  • Mise en cache des résultats de l'action.
  • Réalisation d'autorisation et d'authentification (bien que pour cela, des filtres spécialisés d'autorisation et d'authentification soient généralement utilisés).

Implémentation : Créés en héritant de ActionFilterAttribute ou en implémentant les interfaces IActionFilter (synchrone) ou IAsyncActionFilter (asynchrone).

// Exemple simple de filtre d'action synchrone
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // Logique avant l'exécution de l'action
        Console.WriteLine("Avant l'exécution de l'action");
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        // Logique après l'exécution de l'action
        if (context.Exception == null && context.Result is ObjectResult objectResult)
        {
            // Modification du résultat s'il n'y a pas d'exception et si le résultat est ObjectResult
            Console.WriteLine($"Code de statut du résultat de l'action : {objectResult.StatusCode}");
        }
        Console.WriteLine("Après l'exécution de l'action");
        base.OnActionExecuted(context);
    }
}

Appliqués aux contrôleurs ou aux méthodes d'action spécifiques à l'aide d'attributs :

[CustomActionFilter] // Application au contrôleur
public class HomeController : Controller
{
    [HttpGet]
    [CustomActionFilter] // Application à la méthode d'action
    public IActionResult Index()
    {
        return Ok("Bonjour depuis Index!");
    }
}