C# Academy · Lektion

FluentValidation-regler

Skriv udtryksfulde validators med fluent-syntaks.

Lektion 2 af 413 trin

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.DependencyInjectionExtensions

Basisklassen 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.

Gratis at komme i gang

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

  1. Validering med data annotations
  2. FluentValidation-regler
  3. Brugerdefinerede og betingede regler
  4. Integration af validering med API'er
← Tilbage til C# Academy