
← Предыдущая часть | Следующая часть →
В этой части рассмотрим следующие валидаторы (6):
NotNull— значение не равноnull.Null— значение равноnull.NotEmpty— значение не равноnull, пустой строке, пробелам,0элементам коллекции.Empty— значение равноnull, пустой строке, пробелам,0элементам коллекцииNotEqual— значение не равно определённому либо не равно указанному свойству.Equal— значение равно определённому либо равно указанному свойству.
Список всех встроенных валидаторов (22):
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)