Validation des données en C# (.NET) : l'outil puissant FluentValidation
La validation des données est l'un des aspects clés du développement d'applications sécurisées et fiables en C# (.NET). Que vous créiez une API web avec ASP.NET Core, une application de bureau avec WPF ou un utilitaire console, la vérification des données d'entrée permet d'éviter les erreurs, les injections SQL et un fonctionnement incorrect du système. Dans cet article, nous allons examiner en détail la bibliothèque FluentValidation — un outil moderne, flexible et largement utilisé pour la validation dans l'écosystème .NET.
Qu'est-ce que FluentValidation et pourquoi en a-t-on besoin ?
FluentValidation est une bibliothèque open-source pour .NET qui permet de décrire les règles de validation des objets à l'aide d'une interface fluide (chaîne d'appels de méthodes). Contrairement aux attributs intégrés DataAnnotations, FluentValidation :
- Sépare la logique de validation du modèle de données — les règles sont placées dans des classes de validation distinctes.
- Prend en charge les scénarios complexes — vérifications conditionnelles, règles personnalisées, validations inter-propriétés.
- S'intègre avec ASP.NET Core — vérifie automatiquement les modèles dans les contrôleurs.
- Facilite les tests — les validateurs peuvent être facilement isolés et couverts par des tests unitaires.
Installation et configuration
Pour commencer, installez le package via le gestionnaire de packages NuGet ou l'interface CLI .NET :
dotnet add package FluentValidationSi vous utilisez ASP.NET Core, ajoutez dans Program.cs (ou Startup.cs) l'enregistrement des validateurs :
builder.Services.AddValidatorsFromAssemblyContaining<MyValidator>();Création d'un validateur simple
Supposons que nous ayons un modèle d'utilisateur :
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public int Age { get; set; }}Créons un validateur héritant de AbstractValidator<User> :
using FluentValidation;
public class UserValidator : AbstractValidator<User>{ public UserValidator() { RuleFor(user => user.Name) .NotEmpty().WithMessage("Le nom est obligatoire") .Length(2, 50).WithMessage("Le nom doit contenir entre 2 et 50 caractères");
RuleFor(user => user.Email) .NotEmpty().WithMessage("L'email est obligatoire") .EmailAddress().WithMessage("Format d'email invalide");
RuleFor(user => user.Age) .InclusiveBetween(18, 120).WithMessage("L'âge doit être compris entre 18 et 120 ans"); }}On peut maintenant effectuer la validation :
var validator = new UserValidator();var user = new User { Name = "A", Email = "invalide", Age = 15 };var result = validator.Validate(user);
if (!result.IsValid){ foreach (var error in result.Errors) { Console.WriteLine($"Erreur dans {error.PropertyName}: {error.ErrorMessage}"); }}Fonctionnalités avancées
1. Règles personnalisées (Custom validators)
Vous pouvez écrire votre propre logique de validation avec la méthode Must ou créer une méthode séparée :
RuleFor(user => user.Name) .Must(name => !string.IsNullOrEmpty(name) && name.All(char.IsLetter)) .WithMessage("Le nom ne doit contenir que des lettres");2. Validation conditionnelle
Vérifiez les propriétés uniquement si certaines conditions sont remplies :
RuleFor(user => user.Email) .NotEmpty().When(user => user.Age > 18) .WithMessage("L'email est obligatoire pour les utilisateurs adultes");3. Validation inter-propriétés
Comparez les valeurs de différentes propriétés :
RuleFor(user => user.Password) .Equal(user => user.ConfirmPa Aussi dans la bibliothèque
Jetons JWT en Swift : guide complet pour travailler avec les JSON Web Tokens
Travailler avec les dates en PHP : aperçu des bibliothèques et outils
Configuration des applications C# (.NET) : bibliothèques et approches
Apache Commons Java : guide complet avec exemples pratiques