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 dansHttpContext.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!");
}
}