Validation des données en C# (.NET) : guide complet
La validation des données est l'un des aspects clés du développement d'applications fiables et sécurisées en C#. Elle permet de garantir que les données d'entrée correspondent au format attendu, aux plages de valeurs et aux règles métier. Dans l'écosystème .NET, il existe plusieurs outils puissants pour la validation : des attributs intégrés System.ComponentModel.DataAnnotations à la bibliothèque flexible FluentValidation. Dans cet article, nous allons détailler les deux approches avec des exemples de code.
1. Validation intégrée via DataAnnotations
L'espace de noms System.ComponentModel.DataAnnotations fournit un ensemble d'attributs qui peuvent être appliqués aux propriétés des classes de modèles. C'est la méthode de validation la plus simple et la plus rapide, en particulier dans ASP.NET Core MVC et Blazor.
Attributs principaux :
[Required]— la valeur ne peut pas êtrenullou vide.[StringLength(max)]— limitation de la longueur d'une chaîne.[Range(min, max)]— vérification des plages numériques.[RegularExpression(pattern)]— vérification par expression régulière.[EmailAddress]— validation d'email.[Compare("OtherProperty")]— comparaison de deux propriétés (par exemple, mot de passe et confirmation).
Exemple de modèle avec attributs :
public class UserRegistrationDto{ [Required(ErrorMessage = "Le prénom est obligatoire")] [StringLength(50, MinimumLength = 2, ErrorMessage = "Le prénom doit contenir entre 2 et 50 caractères")] public string FirstName { get; set; }
[Required(ErrorMessage = "L'email est obligatoire")] [EmailAddress(ErrorMessage = "Format d'email invalide")] public string Email { get; set; }
[Required] [Range(18, 120, ErrorMessage = "L'âge doit être compris entre 18 et 120")] public int Age { get; set; }
[Required] [DataType(DataType.Password)] public string Password { get; set; }
[Compare("Password", ErrorMessage = "Les mots de passe ne correspondent pas")] public string ConfirmPassword { get; set; }}Validation manuelle du modèle :
public static bool ValidateUser(UserRegistrationDto user, out List<ValidationResult> errors){ var context = new ValidationContext(user); errors = new List<ValidationResult>(); return Validator.TryValidateObject(user, context, errors, validateAllProperties: true);}
// Utilisation :var user = new UserRegistrationDto { FirstName = "A", Email = "invalide", Age = 15 };if (!ValidateUser(user, out var errors)){ foreach (var error in errors) Console.WriteLine(error.ErrorMessage);}2. FluentValidation — validation avancée
La bibliothèque FluentValidation (NuGet : FluentValidation.AspNetCore) propose une manière plus flexible et lisible de décrire les règles de validation via une interface fluide. Elle est idéale pour les scénarios complexes : validation conditionnelle, messages personnalisés, chaînes de règles et intégration avec les conteneurs DI.
Installation via NuGet :
dotnet add package FluentValidation.AspNetCoreExemple de validateur :
using FluentValidation;
public class UserValidator : AbstractValidator<UserRegistrationDto>{ public UserValidator() { RuleFor(u => u.FirstName) .NotEmpty().WithMessage("Le prénom ne peut pas être vide") .Length(2, 50).WithMessage("Le prénom doit contenir entre 2 et 50 caractères");
RuleFor(u => u.Email) .NotEmpty().WithMessage("L'email est obligatoire") .EmailAddress().WithMessage("Format d'email invalide");
RuleFor(u => u.Age) .InclusiveBetween(18, 120).WithMessage("L'âge doit être compris entre Aussi dans la bibliothèque
Boost pour C++ : guide complet avec exemples
Surveillance des applications TypeScript : outils et bibliothèques
Surveillance des applications Rust : la bibliothèque tracing et les métriques
Tests en C# (.NET) : aperçu complet des frameworks et outils