Текущий валидация - валидатор для коллекции - PullRequest
0 голосов
/ 12 марта 2020

Мой API поддерживает массовое создание объекта. Как FluentValidation поддерживает проверку для чистой коллекции?

Это массовая подпись создания контроллера:

[HttpPost]
public Task<IActionResult> CreateBulk([FromBody] IEnumerable<MyClass> model))

Я хочу проверить, что отправленная коллекция не пуста или не пуста реализует FluentValidation основанный валидатор.

1 Ответ

0 голосов
/ 21 марта 2020

Изначально я не думал, что это возможно, но оказывается, что это возможно. В конце дня коллекция является контейнером, поэтому вы должны иметь возможность создать для нее валидатор, как и для любого другого контейнера с дочерним списком.

Решение состоит в том, чтобы определить валидатор для коллекции. само по себе:

public class ListOfMyClassValidator : AbstractValidator<List<MyClass>>
{
    public ListOfMyClassValidator()
    {
        RuleFor(x => x).Must(x => x.Any()).WithMessage("The list cannot be empty");

        RuleForEach(x => x).SetValidator(new MyClassValidator());
    }
}

Я указал здесь RuleForEach, чтобы каждый элемент списка также проверялся (если у вас есть MyClass валидатор). Вы можете пропустить эту часть, установив ImplicitlyValidateChildProperties в значение true при настройке FV, однако первый способ является рекомендуемым.

Я пробовал это с IEnumerable<MyClass>, однако, который не запускал валидатор. То же самое с IList<MyClass>. Я не исследовал, почему с точки зрения функциональности связыватель модели является счастливым связыванием с List<T>.

Рабочим раствором

...