В этой части рассматриваются следующие валидаторы:

  • NotNull (значение не равно null)

  • Null (значение равно null)

  • NotEmpty (значение не равно null, пустой строке, пробелам, 0 элементам коллекции)

  • Empty (значение равно null, пустой строке, пробелам, 0 элементам коллекции)

  • NotEqual (значение не равно определённому либо не равно указанному свойству)

  • Equal (значение равно определённому либо равно указанному свойству)

Список всех встроенных валидаторов:

  • NotNull

  • Null

  • NotEmpty

  • Empty 

  • NotEqual

  • Equal 

  • Length 

  • MaximumLength 

  • MinimumLength 

  • LessThan 

  • LessThanOrEqual

  • GreaterThan

  • GreaterThanOrEqual

  • Must

  • Matches

  • EmailAddress

  • CreditCard

  • IsInEnum

  • IsEnumName

  • ExclusiveBetween

  • InclusiveBetween

  • PrecisionScale

Валидатор NotNull.

Описание:

Гарантирует, что указанное свойство не равно значению null.
Исходный код валидатора

Пример кода:

// Модель адреса public class Address {   // Фактический адрес   public string? Actual { get; set; } }  // Модель клиента public class Customer {   // Адрес   public Address? Address { get; set; } }  // Валидатор для модели клиента public class CustomerValidator : AbstractValidator<Customer> {   public CustomerValidator()   {     // Свойство Actual должно быть не равно null     RuleFor(customer => customer.Address.Actual)       .NotNull();   } }  // Здесь выполняем валидацию как обычно static void Main(string[] args) {   ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("ru-RU");    // Здесь задаём данные   var customer = new Customer   {     Address = new()     {       Actual = null     }   };      var validator = new CustomerValidator();   var result = validator.Validate(customer);    Console.WriteLine(result.ToString(Environment.NewLine)); }

Пример ошибки:

'Address Actual' должно быть заполнено.

Доступные заполнители:

{PropertyName} — название валидируемого свойства

{PropertyValue} — значение валидируемого свойства

{PropertyPath} — полный путь к свойству

Пример кода с заполнителями:

RuleFor(customer => customer.Address.Actual)   .NotNull()     .WithMessage("PropertyName: {PropertyName}n" +     "PropertyValue: {PropertyValue}n" +     "PropertyPath: {PropertyPath}");

Пример ошибки с заполнителями:

PropertyName: Address Actual PropertyValue: PropertyPath: Address.Actual

Валидатор Null.

Гарантирует, что указанное свойство равно значению null.
Исходный код валидатора

Пример кода:

// Модель адреса public class Address {   // Фактический адрес   public string? Actual { get; set; } }  // Модель клиента public class Customer {   // Адрес   public Address? Address { get; set; } }  // Валидатор для модели клиента public class CustomerValidator : AbstractValidator<Customer> {   public CustomerValidator()   {     // Свойство Actual должно быть равно null     RuleFor(customer => customer.Address.Actual)       .Null();   } }  // Здесь выполняем валидацию как обычно static void Main(string[] args) {   ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("ru-RU");    // Здесь задаём данные   var customer = new Customer   {     Address = new()     {       Actual = "SomeAddress"     }   };    var validator = new CustomerValidator();   var result = validator.Validate(customer);    Console.WriteLine(result.ToString(Environment.NewLine)); }

Пример ошибки:

'Address Actual' должно быть пустым.

Доступные заполнители:

{PropertyName} — название валидируемого свойства

{PropertyValue} — значение валидируемого свойства

{PropertyPath} — полный путь к свойству

Пример кода с заполнителями:

RuleFor(customer => customer.Address.Actual)   .Null()     .WithMessage("PropertyName: {PropertyName}n" +     "PropertyValue: {PropertyValue}n" +     "PropertyPath: {PropertyPath}");

Пример ошибки с заполнителями:

PropertyName: Address Actual PropertyValue: SomeAddress PropertyPath: Address.Actual

Валидатор NotEmpty.

Гарантирует, что указанное свойство не равно значению null, пустой строке, пробелам либо дефолтным значениям для значимых типов, например, 0 для типа int. Если используется на типе IEnumerable, или производном от него (такие как массивы, коллекции и т. д.), валидатор гарантирует, что массив данных содержит хотя бы один элемент.
Исходный код валидатора

Пример кода:

// Модель адреса public class Address {   // Фактический адрес   public string? Actual { get; set; } }  // Модель клиента public class Customer {   // Адрес   public Address? Address { get; set; } }  // Валидатор для модели клиента public class CustomerValidator : AbstractValidator<Customer> {   public CustomerValidator()   {     // Свойство Actual должно быть не равно null, пустой строке, пробелам     RuleFor(customer => customer.Address.Actual)       .NotEmpty();   } }  // Здесь выполняем валидацию как обычно static void Main(string[] args) {   ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("ru-RU");    // Здесь задаём данные   var customer = new Customer   {     Address = new()     {       Actual = ""     }   };    var validator = new CustomerValidator();   var result = validator.Validate(customer);    Console.WriteLine(result.ToString(Environment.NewLine)); }

Пример ошибки:

'Address Actual' должно быть заполнено.

Доступные заполнители:

{PropertyName} — название валидируемого свойства

{PropertyValue} — значение валидируемого свойства

{PropertyPath} — полный путь к свойству

Пример кода с заполнителями:

RuleFor(customer => customer.Address.Actual)   .NotEmpty()     .WithMessage("PropertyName: {PropertyName}n" +     "PropertyValue: {PropertyValue}n" +     "PropertyPath: {PropertyPath}");

Пример ошибки с заполнителями:

PropertyName: Address Actual PropertyValue: PropertyPath: Address.Actual

Валидатор Empty.

Гарантирует, что указанное свойство равно значению null, пустой строке, пробелам либо дефолтным значениям для значимых типов, например, 0 для типа int. Если используется на типе IEnumerable, или производном от него (такие как массивы, коллекции и т. д.), валидатор гарантирует, что массив данных не содержит элементов.
Исходный код валидатора

Пример кода:

// Модель адреса public class Address {   // Фактический адрес   public string? Actual { get; set; } }  // Модель клиента public class Customer {   // Адрес   public Address? Address { get; set; } }  // Валидатор для модели клиента public class CustomerValidator : AbstractValidator<Customer> {   public CustomerValidator()   {     // Свойство Actual должно быть равно null, пустой строке, пробелам     RuleFor(customer => customer.Address.Actual)       .Empty();   } }  // Здесь выполняем валидацию как обычно static void Main(string[] args) {   ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("ru-RU");    // Здесь задаём данные   var customer = new Customer   {     Address = new()     {       Actual = "value"     }   };    var validator = new CustomerValidator();   var result = validator.Validate(customer);    Console.WriteLine(result.ToString(Environment.NewLine)); }

Пример ошибки:

'Address Actual' должно быть пустым.

Доступные заполнители:

{PropertyName} — название валидируемого свойства

{PropertyValue} — значение валидируемого свойства

{PropertyPath} — полный путь к свойству

Пример кода с заполнителями:

RuleFor(customer => customer.Address.Actual)   .Empty()     .WithMessage("PropertyName: {PropertyName}n" +     "PropertyValue: {PropertyValue}n" +     "PropertyPath: {PropertyPath}");

Пример ошибки с заполнителями:

PropertyName: Address Actual PropertyValue: value PropertyPath: Address.Actual

Валидатор NotEqual.

Гарантирует, что указанное свойство не равно определённому значению (или не равно значению другого указанного свойства).
Исходный код валидатора

Первый пример кода (не равно определённому значению):

// Модель клиента public class Customer {   // Номер телефона клиента   public string? PhoneNumber { get; set; } }  // Валидатор для модели клиента public class CustomerValidator : AbstractValidator<Customer> {   public CustomerValidator()   {     // Свойство PhoneNumber должно быть не равно значению "89998887766"     RuleFor(customer => customer.PhoneNumber)       .NotEqual("89998887766");   } }  // Здесь выполняем валидацию как обычно static void Main(string[] args) {   ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("ru-RU");      // Здесь задаём данные   var customer = new Customer   {     PhoneNumber = "89998887766"   };      var validator = new CustomerValidator();   var result = validator.Validate(customer);      Console.WriteLine(result.ToString(Environment.NewLine)); }

Пример ошибки:

'Phone Number' не должно быть равно '89998887766'.

Второй пример кода (не равно значению другого указанного свойства):

// Модель клиента public class Customer {   // Номер телефона клиента   public string? PhoneNumber { get; set; }   // Номер телефона третьего лица   public string? ThirdPartyPhoneNumber { get; set; } } // Валидатор для модели клиента public class CustomerValidator : AbstractValidator<Customer> {   public CustomerValidator()   {     // Свойство PhoneNumber должно быть не равно значению     // свойства ThirdPartyPhoneNumber     RuleFor(customer => customer.PhoneNumber)       .NotEqual(customer => customer.ThirdPartyPhoneNumber);   } } // Здесь выполняем валидацию как обычно static void Main(string[] args) {   ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("ru-RU");      // Здесь задаём данные   var customer = new Customer   {     PhoneNumber = "89998887766",     ThirdPartyPhoneNumber = "89998887766"   };      var validator = new CustomerValidator();   var result = validator.Validate(customer);      Console.WriteLine(result.ToString(Environment.NewLine)); }

Пример ошибки:

'Phone Number' не должно быть равно '89998887766'.

Доступные заполнители:

{PropertyName} — название валидируемого свойства

{PropertyValue} — значение валидируемого свойства

{PropertyPath} — полный путь к свойству

{ComparisonProperty} — название свойства, с которым происходит сравнение

{ComparisonValue} — значение, с которым происходит сравнение

Первый пример кода с заполнителями (не равно определённому значению):

RuleFor(customer => customer.PhoneNumber)   .NotEqual("89998887766")     .WithMessage("PropertyName: {PropertyName}n" +     "PropertyValue: {PropertyValue}n" +     "PropertyPath: {PropertyPath}n" +     "ComparisonProperty: {ComparisonProperty}n" +     "ComparisonValue: {ComparisonValue}");

Первый пример ошибки с заполнителями:

PropertyName: Phone Number PropertyValue: 89998887766 PropertyPath: PhoneNumber ComparisonProperty: ComparisonValue: 89998887766

Второй пример кода с заполнителями (не равно значению другого указанного свойства):

RuleFor(customer => customer.PhoneNumber)   .NotEqual(customer => customer.ThirdPartyPhoneNumber)     .WithMessage("PropertyName: {PropertyName}n" +     "PropertyValue: {PropertyValue}n" +     "PropertyPath: {PropertyPath}n" +     "ComparisonProperty: {ComparisonProperty}n" +     "ComparisonValue: ");

Второй пример ошибки с заполнителями:

PropertyName: Phone Number PropertyValue: 89998887766 PropertyPath: PhoneNumber ComparisonProperty: Third Party Phone Number ComparisonValue: 89998887766

Валидатор Equal.

Описание:

Гарантирует, что указанное свойство равно определённому значению (или равно начению другого указанного свойства).
Исходный код валидатора

Первый пример кода (равно определённому значению):

// Модель адреса public class Address {   // Фактический адрес   public string? Actual { get; set; } }  // Модель клиента public class Customer {   // Адрес   public Address? Address { get; set; } }  // Валидатор для модели клиента public class CustomerValidator : AbstractValidator<Customer> {   public CustomerValidator()   {     // Свойство Actual должно быть равно значению SomeAddress     RuleFor(customer => customer.Address.Actual)       .Equal("SomeAddress");   } }  // Здесь выполняем валидацию как обычно static void Main(string[] args) {   ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("ru-RU");    // Здесь задаём данные   var customer = new Customer   {     Address = new()     {       Actual = "NotSomeAddress"     }   };    var validator = new CustomerValidator();   var result = validator.Validate(customer);    Console.WriteLine(result.ToString(Environment.NewLine)); }

Пример ошибки:

'Address Actual' должно быть равно 'SomeAddress'.

Второй пример кода (равно значению другого указанного свойства):

// Модель клиента public class Customer {   // Пароль   public string? Password { get; set; }   // Подтверждение пароля   public string? PasswordConfirmation { get; set; } }  // Валидатор для модели клиента public class CustomerValidator : AbstractValidator<Customer> {   public CustomerValidator()   {     // Значение свойства Password должно быть равно значению свойства     // PasswordConfirmation     RuleFor(customer => customer.Password)       .Equal(customer => customer.PasswordConfirmation);   } }  // Здесь выполняем валидацию как обычно static void Main(string[] args) {   ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("ru-RU");    // Здесь задаём данные   var customer = new Customer   {     Password = "qwerty1",     PasswordConfirmation = "qwerty2"   };    var validator = new CustomerValidator();   var result = validator.Validate(customer);    Console.WriteLine(result.ToString(Environment.NewLine)); }

Пример ошибки:

'Password' должно быть равно 'qwerty2'.

Доступные заполнители:

{PropertyName} — название валидируемого свойства

{PropertyValue} — значение валидируемого свойства

{PropertyPath} — полный путь к свойству

{ComparisonProperty} — название свойства, с которым происходит сравнение

{ComparisonValue} — значение, с которым происходит сравнение

Первый пример кода с заполнителями (равно определённому значению):

RuleFor(customer => customer.Address.Actual)   .Equal("SomeAddress")     .WithMessage("PropertyName: {PropertyName}n" +     "PropertyValue: {PropertyValue}n" +     "PropertyPath: {PropertyPath}n" +     "ComparisonProperty: {ComparisonProperty}n" +     "ComparisonValue: {ComparisonValue}");

Первый пример ошибки с заполнителями:

PropertyName: Address Actual PropertyValue: NotSomeAddress PropertyPath: Address.Actual ComparisonProperty: ComparisonValue: SomeAddress

Второй пример кода с заполнителями (равно значению другого указанного свойства):

RuleFor(customer => customer.Password)   .Equal(customer => customer.PasswordConfirmation)     .WithMessage("PropertyName: {PropertyName}n" +     "PropertyValue: {PropertyValue}n" +     "PropertyPath: {PropertyPath}n" +     "ComparisonProperty: {ComparisonProperty}n" +     "ComparisonValue: {ComparisonValue}");

Второй пример ошибки с заполнителями:

PropertyName: Password PropertyValue: qwerty1 PropertyPath: Password ComparisonProperty: Password Confirmation ComparisonValue: qwerty2

Можно указать тип сравнения через второй аргумент, с помощью перечисления StringComparer. По умолчанию стоит значение StringComparer.Ordinal (порядковое сравнение с учётом регистра):

// Cоответствует определённому значению (порядковое сравнение без учёта регистра) RuleFor(customer => customer.Address.Actual)   .Equal("SomeAddress", StringComparer.OrdinalIgnoreCase);  // Соответствует значению другого указанного свойства (порядковое сравнение без учёта регистра) RuleFor(customer => customer.Password)   .Equal(customer => customer.PasswordConfirmation, StringComparer.OrdinalIgnoreCase)

← Предыдущая часть