0Pricing
C# Academy · Урок

Проверка с помощью аннотаций данных

Проверяйте модели с помощью атрибутов.

«Проверка с помощью аннотаций данных» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Что такое проверка с помощью аннотаций данных

Аннотации данных — это атрибуты, которые размещаются над свойствами модели и объявляют правила проверки непосредственно в классах C#. ASP.NET Core считывает эти атрибуты во время привязки модели и автоматически проверяет входящие запросы.

Они находятся в пространстве имён System.ComponentModel.DataAnnotations.

using System.ComponentModel.DataAnnotations;

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

Атрибут [Required]

[Required] гарантирует, что свойство не равно null (и по умолчанию не содержит пустую строку). Если клиент не передал поле, проверка модели завершится ошибкой ещё до запуска вашего действия.

Вы можете настроить сообщение с помощью ErrorMessage.

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

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

Проверка чисел с помощью [Range]

[Range] ограничивает числовое значение включёнными минимальной и максимальной границами. Атрибут работает с типами int, decimal и многими другими.

Используйте его для возраста, количества, рейтингов и любых чисел с заданными границами.

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; }
}

Проверка электронной почты с помощью [EmailAddress]

[EmailAddress] проверяет, похожа ли строка на корректный адрес электронной почты. Объедините его с [Required], чтобы поле одновременно присутствовало и имело правильный формат.

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

Ограничения длины строк

[StringLength] задаёт максимальную и, при необходимости, минимальную длину текста. [MinLength] и [MaxLength] — более простые альтернативы.

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

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

Проверка по шаблону с помощью [RegularExpression]

[RegularExpression] проверяет строку по шаблону регулярного выражения. Он особенно удобен для таких форматов, как номера телефонов, почтовые индексы или слаги.

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

Сравнение двух полей с помощью [Compare]

[Compare] гарантирует, что одно свойство совпадает с другим. Классический пример — подтверждение пароля.

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

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

Как ModelState сообщает об ошибках

При сбое проверки ASP.NET Core заполняет ModelState ошибками. В контроллере API, помеченном атрибутом [ApiController], недействительные запросы автоматически получают ответ 400, поэтому обычно проверять это вручную не требуется.

[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);
    }
}

Ручная проверка ModelState

Без атрибута [ApiController] (например, в контроллерах MVC) вы самостоятельно проверяете ModelState.IsValid и решаете, какой ответ отправить.

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

Объединение нескольких аннотаций

Аннотации объединяются. Одно свойство может иметь несколько атрибутов, и проверку должны пройти все. Порядок не влияет на проверку, но располагайте атрибуты так, чтобы их было удобно читать.

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; }
}

Когда аннотаций данных недостаточно

Аннотации данных отлично подходят для простых декларативных правил. Но логика, связывающая несколько свойств, обращения к базе данных или условные правила («обязательно только при X») быстро становятся неудобными. Здесь особенно полезен FluentValidation, который мы рассмотрим далее.

Быстрая проверка

Проверьте, насколько хорошо вы поняли аннотации данных.

Итоги

Вы узнали, что аннотации данных объявляют правила проверки с помощью атрибутов: [Required] проверяет наличие значения, [Range] — числовые границы, а [EmailAddress] — формат электронной почты; также существуют [StringLength], [RegularExpression] и [Compare]. С атрибутом [ApiController] ошибки автоматически возвращают ответ 400 через ModelState. Для сложных правил далее используйте FluentValidation.

Часто задаваемые вопросы

Урок «Проверка с помощью аннотаций данных» бесплатный?

Да — полный текст урока «Проверка с помощью аннотаций данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Проверка с помощью аннотаций данных»?

Проверяйте модели с помощью атрибутов. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Проверка с помощью аннотаций данных»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проверка с помощью аннотаций данных
  2. Правила FluentValidation
  3. Пользовательские и условные правила
  4. Интеграция проверки с API
← Назад к C# Academy