0Pricing
C# Academy · Lezione

Regole di FluentValidation

Scriva validator espressivi con la sintassi fluent.

Regole di FluentValidation è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Perché FluentValidation

FluentValidation è una libreria .NET molto usata che sposta le regole di convalida dai modelli a classi di validazione dedicate. Le regole vengono espresse tramite un'API leggibile e concatenabile (fluent), mantenendo puliti i modelli e rendendo le regole facilmente testabili.

dotnet add package FluentValidation
dotnet add package FluentValidation.DependencyInjectionExtensions

La classe base AbstractValidator

Scriva un validatore ereditando da AbstractValidator<T>, dove T è il modello da convalidare. Le regole vengono definite nel costruttore.

using FluentValidation;

public class CustomerValidator : AbstractValidator<Customer>
{
    public CustomerValidator()
    {
        // rules go here
    }
}

Definizione della prima regola con RuleFor

RuleFor seleziona una proprietà tramite una lambda, quindi consente di concatenarvi i validatori. NotEmpty() rifiuta i valori null, le stringhe vuote e i valori predefiniti.

public class CustomerValidator : AbstractValidator<Customer>
{
    public CustomerValidator()
    {
        RuleFor(c => c.Name).NotEmpty();
    }
}

Concatenazione di più validatori

Ogni RuleFor può concatenare diversi validatori. Vengono eseguiti in ordine e devono essere superati tutti. Il risultato è quasi una frase.

RuleFor(c => c.Name)
    .NotEmpty()
    .MinimumLength(2)
    .MaximumLength(50);

Validatori integrati

FluentValidation include numerosi validatori: NotNull, NotEmpty, EmailAddress, Length, InclusiveBetween, GreaterThan, Matches (regex) e altri.

RuleFor(c => c.Email).NotEmpty().EmailAddress();
RuleFor(c => c.Age).InclusiveBetween(18, 120);
RuleFor(c => c.Phone).Matches(@"^\+?[0-9]{7,15}$");

Messaggi di errore personalizzati

Usi WithMessage per sostituire il messaggio predefinito. Può interpolare segnaposto come {PropertyName} e {PropertyValue}.

RuleFor(c => c.Email)
    .NotEmpty().WithMessage("Email is required.")
    .EmailAddress().WithMessage("{PropertyValue} is not a valid email.");

Codici di errore e gravità personalizzati

Oltre ai messaggi, può associare un WithErrorCode leggibile dalle macchine e un WithSeverity (Error, Warning, Info), per aiutare i client a reagire in modo diverso.

RuleFor(c => c.Name)
    .NotEmpty()
    .WithErrorCode("NAME_REQUIRED")
    .WithSeverity(Severity.Error);

Convalida di oggetti annidati

Usi SetValidator per riutilizzare un validatore per un oggetto figlio, mantenendo modulari le regole.

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleFor(o => o.Customer).SetValidator(new CustomerValidator());
    }
}

Convalida delle raccolte

RuleForEach applica le regole a ogni elemento di una raccolta.

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleForEach(o => o.Items)
            .ChildRules(item => item.RuleFor(i => i.Quantity).GreaterThan(0));
    }
}

Esecuzione manuale di un validatore

Può invocare direttamente un validatore e analizzarne il risultato. ValidationResult espone IsValid e un elenco Errors.

var validator = new CustomerValidator();
ValidationResult result = validator.Validate(customer);

if (!result.IsValid)
{
    foreach (var error in result.Errors)
    {
        Console.WriteLine(error.PropertyName + ": " + error.ErrorMessage);
    }
}

Convalida asincrona

Quando una regola richiede operazioni di I/O, ad esempio un controllo nel database, usi ValidateAsync e validatori asincroni come MustAsync, che analizzeremo nella lezione sulle regole personalizzate.

ValidationResult result = await validator.ValidateAsync(customer);

Verifica rapida

Verifichi le nozioni di base su FluentValidation.

Riepilogo

FluentValidation inserisce le regole in classi AbstractValidator<T>. RuleFor seleziona una proprietà, quindi consente di concatenare validatori integrati come NotEmpty, EmailAddress e InclusiveBetween. Personalizzi i messaggi con WithMessage, WithErrorCode e WithSeverity, riutilizzi la logica con SetValidator e RuleForEach ed esegua le regole tramite Validate/ValidateAsync.

Domande Frequenti

La lezione «Regole di FluentValidation» è gratuita?

Sì — il testo completo di «Regole di FluentValidation» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Regole di FluentValidation»?

Scriva validator espressivi con la sintassi fluent. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Regole di FluentValidation»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Convalida con Data Annotations
  2. Regole di FluentValidation
  3. Regole personalizzate e condizionali
  4. Integrazione della convalida con le API
← Torna a C# Academy