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.DependencyInjectionExtensionsLa 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
- Convalida con Data Annotations
- Regole di FluentValidation
- Regole personalizzate e condizionali
- Integrazione della convalida con le API