0Pricing
C# Academy · Lekcja

Walidacja za pomocą adnotacji danych

Waliduj modele za pomocą atrybutów.

Walidacja za pomocą adnotacji danych to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 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.

Czym jest walidacja za pomocą adnotacji danych

Adnotacje danych to atrybuty umieszczane we właściwościach modeli w celu bezpośredniego deklarowania reguł walidacji w klasach C#. ASP.NET Core odczytuje te atrybuty podczas wiązania modelu i automatycznie waliduje przychodzące żądania.

Znajdują się one w przestrzeni nazw System.ComponentModel.DataAnnotations.

using System.ComponentModel.DataAnnotations;

public class RegisterRequest
{
    [Required]
    public string Username { get; set; }
}

Atrybut [Required]

[Required] gwarantuje, że właściwość nie ma wartości null (oraz domyślnie nie jest pustym ciągiem znaków). Jeśli klient pominie to pole, walidacja modelu zakończy się niepowodzeniem, zanim zostanie uruchomiona metoda akcji.

Komunikat można dostosować za pomocą ErrorMessage.

public class RegisterRequest
{
    [Required(ErrorMessage = "Username is required.")]
    public string Username { get; set; }

    [Required]
    public string Password { get; set; }
}

Walidacja liczb za pomocą [Range]

[Range] ogranicza wartość liczbową do przedziału od minimalnej do maksymalnej wartości włącznie. Działa z typami int, double, decimal i innymi.

Należy używać go w przypadku wieku, ilości, ocen oraz dowolnych liczb z określonym zakresem.

public class ProductRequest
{
    [Range(1, 1000, ErrorMessage = "Quantity must be between 1 and 1000.")]
    public int Quantity { get; set; }

    [Range(0.01, 9999.99)]
    public decimal Price { get; set; }
}

Walidacja adresu e-mail za pomocą [EmailAddress]

[EmailAddress] sprawdza, czy ciąg znaków wygląda jak prawidłowy adres e-mail. Należy połączyć go z [Required], aby pole było jednocześnie obecne i poprawnie sformatowane.

public class ContactRequest
{
    [Required]
    [EmailAddress(ErrorMessage = "Please enter a valid email.")]
    public string Email { get; set; }
}

Ograniczenia długości ciągu znaków

[StringLength] ustawia maksymalną oraz opcjonalnie minimalną długość tekstu. [MinLength] i [MaxLength] to prostsze alternatywy.

public class RegisterRequest
{
    [Required]
    [StringLength(20, MinimumLength = 3)]
    public string Username { get; set; }

    [MaxLength(500)]
    public string Bio { get; set; }
}

Dopasowywanie wzorców za pomocą [RegularExpression]

[RegularExpression] waliduje ciąg znaków względem wzorca wyrażenia regularnego. Doskonale nadaje się do formatów takich jak numery telefonów, kody pocztowe czy slugi.

public class ProfileRequest
{
    [RegularExpression(@"^[a-z0-9-]+$",
        ErrorMessage = "Slug may only contain lowercase letters, digits and dashes.")]
    public string Slug { get; set; }
}

Porównywanie dwóch pól za pomocą [Compare]

[Compare] zapewnia zgodność jednej właściwości z inną. Klasycznym zastosowaniem jest potwierdzanie hasła.

public class RegisterRequest
{
    [Required]
    public string Password { get; set; }

    [Compare(nameof(Password), ErrorMessage = "Passwords do not match.")]
    public string ConfirmPassword { get; set; }
}

Jak ModelState zgłasza błędy

Gdy walidacja się nie powiedzie, ASP.NET Core wypełnia obiekt ModelState informacjami o błędach. W kontrolerze API oznaczonym atrybutem [ApiController] niepoprawne żądania automatycznie otrzymują odpowiedź 400, dlatego rzadko trzeba sprawdzać ten obiekt ręcznie.

[ApiController]
[Route("api/[controller]")]
public class AccountController : ControllerBase
{
    [HttpPost("register")]
    public IActionResult Register(RegisterRequest request)
    {
        // [ApiController] already returned 400 if invalid
        return Ok("Registered " + request.Username);
    }
}

Ręczne sprawdzanie ModelState

Bez atrybutu [ApiController] (na przykład w kontrolerach MVC) należy samodzielnie sprawdzić ModelState.IsValid i zdecydować, jak odpowiedzieć.

public IActionResult Register(RegisterRequest request)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    return Ok();
}

Łączenie wielu adnotacji

Adnotacje można łączyć. Jedna właściwość może mieć kilka atrybutów i wszystkie muszą przejść walidację. Kolejność nie ma znaczenia podczas sprawdzania, ale warto zadbać o czytelny zapis.

public class SignupRequest
{
    [Required]
    [EmailAddress]
    [StringLength(254)]
    public string Email { get; set; }

    [Required]
    [Range(18, 120, ErrorMessage = "Must be 18 or older.")]
    public int Age { get; set; }
}

Kiedy adnotacje danych nie wystarczają

Adnotacje danych świetnie sprawdzają się w przypadku prostych, deklaratywnych reguł. Logika obejmująca wiele właściwości, odwołania do bazy danych czy reguły warunkowe („wymagane tylko, gdy X”) szybko stają się jednak niewygodne. W takich sytuacjach przydaje się FluentValidation, któremu poświęcona jest następna część.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat adnotacji danych.

Podsumowanie

Dowiedział się Pan / Dowiedziała się Pani, że adnotacje danych deklarują reguły walidacji jako atrybuty: [Required] służy do sprawdzania obecności, [Range] określa zakresy liczbowe, a [EmailAddress] sprawdza format adresu e-mail; dostępne są także [StringLength], [RegularExpression] i [Compare]. Wraz z [ApiController] błędy automatycznie powodują zwrócenie odpowiedzi 400 za pośrednictwem ModelState. W przypadku złożonych reguł należy przejść do FluentValidation.

Często zadawane pytania

Czy lekcja „Walidacja za pomocą adnotacji danych” jest bezpłatna?

Tak — pełny tekst „Walidacja za pomocą adnotacji danych” 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 „Walidacja za pomocą adnotacji danych”?

Waliduj modele za pomocą atrybutów. Ć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 1 z 4.

Ile czasu zajmuje lekcja „Walidacja za pomocą adnotacji danych”?

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