Как остановить вызов проверки в случае исключения десериализации в основном веб-приложении asp.net - PullRequest
0 голосов
/ 03 октября 2019

Я использую 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 равен нулюи беглая проверка добавляет одно дополнительное сообщение. Почтальон

...