0Pricing
C# Academy · Leçon

Règles personnalisées et conditionnelles

Construisez une logique de validation complexe et conditionnelle.

Règles personnalisées et conditionnelles est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Au-delà des validateurs intégrés

Dans les applications réelles, la validation nécessite souvent une logique personnalisée : une valeur qui satisfait une vérification de domaine ou une règle qui ne s’applique que dans certaines conditions. FluentValidation prend en charge ces deux cas avec Must, When et des types de validateurs personnalisés.

Le prédicat Must

Must reçoit un prédicat qui renvoie true lorsque la valeur est valide. C’est la manière la plus simple d’exprimer directement une logique quelconque.

RuleFor(c => c.Username)
    .Must(name => !name.Contains(" "))
    .WithMessage("Username cannot contain spaces.");

Must avec accès à l’objet entier

Une surcharge de Must vous donne accès à l’objet parent ainsi qu’à la valeur de la propriété, ce qui permet d’effectuer des vérifications entre propriétés.

RuleFor(o => o.DiscountedPrice)
    .Must((order, discounted) => discounted <= order.OriginalPrice)
    .WithMessage("Discounted price cannot exceed original price.");

Règles conditionnelles avec When

When applique une règle uniquement si une condition est remplie. Ici, une adresse de livraison est requise uniquement pour les commandes physiques.

RuleFor(o => o.ShippingAddress)
    .NotEmpty()
    .When(o => o.RequiresShipping);

Le modificateur Unless

Unless est l’inverse de When : la règle s’exécute sauf si la condition est vraie.

RuleFor(o => o.CouponCode)
    .NotEmpty()
    .Unless(o => o.IsGift);

Regrouper les conditions

Regroupez plusieurs règles dans un seul bloc When(...) afin d’appliquer proprement une même condition à toutes.

When(o => o.RequiresShipping, () =>
{
    RuleFor(o => o.ShippingAddress).NotEmpty();
    RuleFor(o => o.PostalCode).NotEmpty();
});

Logique personnalisée asynchrone avec MustAsync

Lorsque votre vérification nécessite la base de données ou une API, utilisez MustAsync. Validez le modèle avec ValidateAsync.

RuleFor(u => u.Email)
    .MustAsync(async (email, cancellation) =>
        !await _repository.EmailExistsAsync(email))
    .WithMessage("Email is already registered.");

Écrire un validator personnalisé réutilisable

Pour une logique réutilisée dans plusieurs projets, écrivez une méthode d’extension sur IRuleBuilder. Vous transformez ainsi les règles personnalisées en validateurs de première classe pouvant être enchaînés.

public static class CustomValidators
{
    public static IRuleBuilderOptions<T, string> ValidSlug<T>(
        this IRuleBuilder<T, string> rule)
    {
        return rule.Matches("^[a-z0-9-]+$")
            .WithMessage("Must be a lowercase slug.");
    }
}

Utiliser le validator personnalisé

Une fois définie, l’extension s’enchaîne comme n’importe quel validator intégré, ce qui permet de conserver des validators expressifs.

RuleFor(p => p.Slug).NotEmpty().ValidSlug();

La méthode Custom pour un contrôle total

Pour les résultats complexes, Custom vous permet d’ajouter des erreurs de validation de manière impérative à l’aide d’un contexte.

RuleFor(o => o.Items).Custom((items, context) =>
{
    if (items.Count == 0)
        context.AddFailure("An order must contain at least one item.");
});

Modes de cascade

Par défaut, tous les validateurs d’une chaîne s’exécutent même après un échec. Définissez CascadeMode.Stop pour vous arrêter au premier échec et éviter les vérifications redondantes ou risquées.

RuleFor(c => c.Email)
    .Cascade(CascadeMode.Stop)
    .NotEmpty()
    .EmailAddress();

Vérification rapide

Vérifiez les règles conditionnelles et personnalisées.

Récapitulatif

Les règles personnalisées et conditionnelles rendent FluentValidation flexible : Must pour les prédicats intégrés directement (avec une surcharge exposant l’objet entier), When/Unless pour les conditions, les blocs When regroupés, MustAsync pour les vérifications nécessitant des entrées-sorties, les extensions réutilisables de IRuleBuilder, la méthode impérative Custom et les modes Cascade pour contrôler le déroulement de l’évaluation.

Questions Fréquemment Posées

La leçon « Règles personnalisées et conditionnelles » est-elle gratuite ?

Oui — le texte complet de « Règles personnalisées et conditionnelles » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Règles personnalisées et conditionnelles » ?

Construisez une logique de validation complexe et conditionnelle. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Règles personnalisées et conditionnelles » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Validation par annotations de données
  2. Règles FluentValidation
  3. Règles personnalisées et conditionnelles
  4. Intégrer la validation aux API
← Retour à C# Academy