В этой части рассматриваются следующие валидаторы:
-
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)
← Предыдущая часть