Я не могу найти вопрос о точной задаче экзамена, поэтому я пишу свой.
Мне нужно проверить модель с несколькими строковыми свойствами.Каждый из них может быть либо Null
, либо между 1
и 100
символами.
У меня есть несколько других валидаторов, где я использую этот подход:
RuleFor(model => model.Name)
.Must(name => string.IsNullOrEmpty(name) || name.Length > minLength)
.WithErrorCode(ErrorCodes.MinStringLength)
.WithState(model => new
{
expected = minLength,
actual = model.Name.Length
});
Однако мне также нужнопроверить на maxLength
, что в основном дублирует вышеприведенное выражение, но на name.Length < maxLength
.Учитывая, что мне нужно проверить более одного свойства таким образом, я чувствую, что можно провести некоторую оптимизацию, чтобы уменьшить количество кода, необходимого для этого.
Одна вещь, которую я начал реализовывать, но не мог понятькак заставить это работать:
RuleFor(model => model.Name)
.Must(name => string.IsNullOrEmpty(name) || (name.Length > minLength || name.Length < maxLength))
.WithErrorCode(name.Length <= minLength ? ErrorCodes.MinStringLength : ErrorCodes.MaxStringLength)
.WithState(model => new
{
expected = model.Name <= minLength ? minLength : maxLength,
actual = model.Name.Length
});
Проблема здесь в том, что в .WithErrorCode(..
у меня нет доступа к name
или model
.Я предполагаю, что могу назначить их переменным за пределами RuleFor
, но я не уверен в этом конкретном подходе.