FluentValidation-regler
Skriv udtryksfulde validators med fluent-syntaks.
FluentValidation-regler er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 4 lektioner i alt.
Hvorfor FluentValidation?
FluentValidation er et populært .NET-bibliotek, der flytter valideringsregler ud af dine modeller og ind i dedikerede valideringsklasser. Reglerne udtrykkes med en læsbar API, hvor kald kan kædes, så modellerne holdes rene, og reglerne kan testes.
dotnet add package FluentValidation
dotnet add package FluentValidation.DependencyInjectionExtensionsBasisklassen AbstractValidator
Du skriver en validator ved at nedarve fra AbstractValidator<T>, hvor T er den model, du validerer. Reglerne defineres i konstruktøren.
using FluentValidation;
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
// rules go here
}
}Definition af din første regel med RuleFor
RuleFor vælger en egenskab via et lambdaudtryk, hvorefter du kæder validatorer på den. NotEmpty() afviser null-værdier, tomme strenge og standardværdier.
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
RuleFor(c => c.Name).NotEmpty();
}
}Kædning af flere validatorer
Hver RuleFor kan kæde flere validatorer. De køres i rækkefølge, og alle skal bestå. Det læses næsten som en sætning.
RuleFor(c => c.Name)
.NotEmpty()
.MinimumLength(2)
.MaximumLength(50);Indbyggede validatorer
FluentValidation indeholder mange validatorer: NotNull, NotEmpty, EmailAddress, Length, InclusiveBetween, GreaterThan, Matches (regulært udtryk) og flere.
RuleFor(c => c.Email).NotEmpty().EmailAddress();
RuleFor(c => c.Age).InclusiveBetween(18, 120);
RuleFor(c => c.Phone).Matches(@"^\+?[0-9]{7,15}$");Brugerdefinerede fejlmeddelelser
Brug WithMessage til at tilsidesætte standardmeddelelsen. Du kan indsætte pladsholdere som {PropertyName} og {PropertyValue}.
RuleFor(c => c.Email)
.NotEmpty().WithMessage("Email is required.")
.EmailAddress().WithMessage("{PropertyValue} is not a valid email.");Brugerdefinerede fejlkoder og alvorlighedsgrad
Ud over meddelelser kan du tilføje en maskinlæsbar WithErrorCode og en WithSeverity (Error, Warning, Info), så klienter kan reagere forskelligt.
RuleFor(c => c.Name)
.NotEmpty()
.WithErrorCode("NAME_REQUIRED")
.WithSeverity(Severity.Error);Validering af indlejrede objekter
Brug SetValidator til at genbruge en validator til et underobjekt, så reglerne forbliver modulære.
public class OrderValidator : AbstractValidator<Order>
{
public OrderValidator()
{
RuleFor(o => o.Customer).SetValidator(new CustomerValidator());
}
}Validering af samlinger
RuleForEach anvender regler på hvert element i en samling.
public class OrderValidator : AbstractValidator<Order>
{
public OrderValidator()
{
RuleForEach(o => o.Items)
.ChildRules(item => item.RuleFor(i => i.Quantity).GreaterThan(0));
}
}Manuel kørsel af en validator
Du kan kalde en validator direkte og undersøge resultatet. ValidationResult indeholder IsValid og en liste med 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);
}
}Asynkron validering
Når en regel kræver I/O, f.eks. et databaseopslag, skal du bruge ValidateAsync og asynkrone validatorer som MustAsync, som vi undersøger i afsnittet om brugerdefinerede regler.
ValidationResult result = await validator.ValidateAsync(customer);Hurtig kontrol
Test det grundlæggende i FluentValidation.
Opsummering
FluentValidation placerer regler i klasser, der nedarver fra AbstractValidator<T>. RuleFor målretter en egenskab, hvorefter du kæder indbyggede validatorer som NotEmpty, EmailAddress og InclusiveBetween. Tilpas tilbagemeldinger med WithMessage, WithErrorCode og WithSeverity, genbrug logik med SetValidator og RuleForEach, og kør reglerne med Validate/ValidateAsync.
Lær C# med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 93
- Lektioner
- 346
Ofte stillede spørgsmål
Er lektionen “FluentValidation-regler” gratis?
Ja — hele teksten til “FluentValidation-regler” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “FluentValidation-regler”?
Skriv udtryksfulde validators med fluent-syntaks. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C# Academy?
Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “FluentValidation-regler”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C# Academy-lektion?
Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Validering med data annotations
- FluentValidation-regler
- Brugerdefinerede og betingede regler
- Integration af validering med API'er