0Pricing
C# Academy · Lekcja

Reguły FluentValidation

Pisz wyraziste walidatory za pomocą składni FluentValidation.

Reguły FluentValidation to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.

Dlaczego FluentValidation

FluentValidation to popularna biblioteka .NET, która przenosi reguły walidacji z modeli do dedykowanych klas walidatorów. Reguły wyraża się za pomocą czytelnego, łańcuchowego interfejsu fluent, dzięki czemu modele pozostają przejrzyste, a reguły można testować.

dotnet add package FluentValidation
dotnet add package FluentValidation.DependencyInjectionExtensions

Bazowa klasa AbstractValidator

Walidator tworzy się przez dziedziczenie po AbstractValidator<T>, gdzie T oznacza walidowany model. Reguły definiuje się w konstruktorze.

using FluentValidation;

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

Definiowanie pierwszej reguły za pomocą RuleFor

RuleFor wybiera właściwość za pomocą lambdy, a następnie pozwala dołączyć do niej łańcuch walidatorów. NotEmpty() odrzuca wartości null, puste ciągi znaków i wartości domyślne.

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

Łączenie wielu walidatorów

Do każdego RuleFor można dołączyć kilka walidatorów. Są one uruchamiane w kolejności i wszystkie muszą przejść walidację. Taki zapis niemal przypomina zdanie.

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

Wbudowane walidatory

FluentValidation zawiera wiele walidatorów: NotNull, NotEmpty, EmailAddress, Length, InclusiveBetween, GreaterThan, Matches (wyrażenie regularne) i inne.

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

Własne komunikaty błędów

Za pomocą WithMessage można zastąpić domyślny komunikat. Można interpolować symbole zastępcze, takie jak {PropertyName} i {PropertyValue}.

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

Własne kody błędów i poziomy ważności

Oprócz komunikatów można dodać odczytywalny maszynowo kod za pomocą WithErrorCode oraz poziom ważności za pomocą WithSeverity (Error, Warning, Info), aby ułatwić klientom różne reagowanie na błędy.

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

Walidacja zagnieżdżonych obiektów

Za pomocą SetValidator można ponownie użyć walidatora dla obiektu podrzędnego, zachowując modularność reguł.

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

Walidacja kolekcji

RuleForEach stosuje reguły do każdego elementu kolekcji.

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

Ręczne uruchamianie walidatora

Walidator można wywołać bezpośrednio i sprawdzić wynik. Obiekt ValidationResult udostępnia właściwość IsValid oraz listę 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);
    }
}

Walidacja asynchroniczna

Gdy reguła wymaga operacji wejścia/wyjścia, na przykład sprawdzenia w bazie danych, należy użyć ValidateAsync oraz asynchronicznych walidatorów, takich jak MustAsync, które zostaną omówione w lekcji o regułach niestandardowych.

ValidationResult result = await validator.ValidateAsync(customer);

Szybkie sprawdzenie

Sprawdź podstawy FluentValidation.

Podsumowanie

FluentValidation umieszcza reguły w klasach AbstractValidator<T>. RuleFor wskazuje właściwość, a następnie można połączyć wbudowane walidatory, takie jak NotEmpty, EmailAddress i InclusiveBetween. Informacje zwrotne można dostosować za pomocą WithMessage, WithErrorCode i WithSeverity, logikę ponownie wykorzystać dzięki SetValidator i RuleForEach, a reguły uruchamiać za pomocą Validate/ValidateAsync.

Często zadawane pytania

Czy lekcja „Reguły FluentValidation” jest bezpłatna?

Tak — pełny tekst „Reguły FluentValidation” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Reguły FluentValidation”?

Pisz wyraziste walidatory za pomocą składni FluentValidation. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Reguły FluentValidation”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Walidacja za pomocą adnotacji danych
  2. Reguły FluentValidation
  3. Reguły niestandardowe i warunkowe
  4. Integracja walidacji z API
← Powrót do C# Academy