Я использую FluentValidation.AspNetCore для проверки моей модели представления. У меня есть фильтр с парой datetime? свойства внутри. Когда я отправляю недопустимую дату и время (2019-17-10T00: 00: 00), я получаю 2 сообщения о проверке вместо 1 (первое - ошибка десериализации, а второе - от бесплатной проверки). Кто-нибудь знает, как остановить вызов проверки в случае исключения десериализации.
Моя конфигурация запуска
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(o =>
{
o.ModelValidatorProviders.Clear();
}).AddFluentValidation(cfg => cfg.RegisterValidatorsFromAssemblyContaining<Startup>());
}
Мой контроллер
[Route("api/[controller]")]
[ApiController]
public class EmployeesController : ControllerBase
{
private static List<Employee> _employees = new List<Employee> { new Employee { FirstName = "Sarah", LastName = "Connor", Birthday = DateTime.Now.AddYears(-40) } };
[HttpGet]
public Task<List<Employee>> GetAsync([FromQuery] EmployeeFilter filter)
{
return Task.FromResult(_employees);
}
}
мои модели
public class Employee
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Birthday { get; set; }
}
public class EmployeeFilter
{
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
}
Валидаторы
public class EmployeeValidator : AbstractValidator<EmployeeFilter>
{
public EmployeeValidator()
{
RuleFor(x => x.DateFrom).NotNull();
RuleFor(x => x.DateTo).NotNull();
}
}
Я ожидаю получить только исключение десериализации
"DateTo": [
"The value '2019-17-10T00:00:00' is not valid for DateTo.",
]
Но фактическим было:
"DateTo": [
"The value '2019-17-10T00:00:00' is not valid for DateTo.",
"'Date To' must not be empty."
]
Так что после десериализации DateTo равен нулюи беглая проверка добавляет одно дополнительное сообщение. Почтальон