Comment appliquez-vous des filtres dans les pipelines en C# ? Pouvez-vous donner des exemples d'utilisation ?
sobes.tech IA
Réponse de l'IA
Les filtres dans les pipelines C# sont utilisés pour intercepter et intervenir à différentes étapes du traitement d'une requête ou de l'exécution d'une tâche. Dans les applications web ASP.NET Core, ils permettent d'ajouter une logique avant, après ou pendant l'exécution des méthodes d'action des contrôleurs, ainsi qu'à d'autres niveaux de traitement des requêtes.
Exemples d'utilisation des filtres dans ASP.NET Core :
-
Filtres d'authentification et d'autorisation : Déterminent si un utilisateur est autorisé à effectuer une action spécifique.
// Exemple d'attribut Authorize [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Filtres de ressources : S'exécutent en premier après les filtres d'autorisation. Peuvent effectuer du caching ou interrompre le pipeline.
// Exemple de filtre de ressources pour le caching public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Logique avant l'exécution de l'action } public void OnResourceExecuted(ResourceExecutedContext context) { // Logique après l'exécution de l'action, mais avant l'écriture de la réponse } } -
Filtres d'action : S'exécutent avant et après la méthode d'action du contrôleur. Utile pour valider des données, faire du logging ou modifier des paramètres et résultats.
// Exemple de filtre d'action pour le logging public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Logique avant l'exécution de l'action Console.WriteLine($"Exécution de l'action : {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Logique après l'exécution de l'action Console.WriteLine($"Action exécutée : {context.ActionDescriptor.DisplayName}"); } } // Application du filtre d'action à une méthode [LogActionFilter] public IActionResult About() { return View(); } -
Filtres d'exception : Gèrent les exceptions non gérées qui surviennent lors de l'exécution de la méthode d'action ou d'autres filtres.
// Exemple de filtre d'exception pour la gestion des erreurs public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Logique de gestion de l'exception context.Result = new ContentResult() { Content = "Une erreur est survenue.", StatusCode = 500 }; context.ExceptionHandled = true; // Indique que l'exception a été gérée } } // Application du filtre d'exception à un contrôleur [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("Quelque chose a mal tourné !"); } } -
Filtres de résultats : S'exécutent avant et après l'exécution de la méthode de résultat (par exemple, avant ou après l'exécution de ViewResult, JsonResult, etc.).
// Exemple de filtre de résultat pour modifier le résultat public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Logique avant l'exécution de la méthode de résultat Console.WriteLine($"Type de résultat en cours d'exécution : {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Logique après l'exécution de la méthode de résultat Console.WriteLine($"Type de résultat exécuté : {context.Result.GetType().Name}"); } }
Les filtres peuvent être appliqués globalement (pour toutes les requêtes), au niveau du contrôleur ou au niveau d'une méthode d'action spécifique. Leur ordre d'exécution dans le pipeline est déterminé par leur type.