如何使用FluentValidation验证Guid列表

时间:2018-04-26 11:47:04

标签: c# .net-core fluentvalidation

我正在尝试使用Fluent验证来验证Guid列表 我的Ids列表应该至少有一个Guid Id。我做了一些研究,发现回答了类似的问题,而我最接近解决方案就是如下所示实现它,但它仍然无法正常工作。当我发送请求时,即使我发送带有值的ID列表,它也会给出错误消息,即Value不能为null。我做错了什么?

    public class Data
    {
        public List<Guid> Ids{ get; set; }
    }

    public class DataValidator : AbstractValidator<Data>
    {
        public DataValidator()
        {
            RuleFor(d => d.Ids).SetCollectionValidator(new GuidValidator());
        }
    }

    public class GuidValidator : AbstractValidator<Guid>
    {
        public GuidValidator()
        {
            RuleFor(x => x).NotNull().NotEmpty();
        }
    }

我也尝试过这个验证器,但它没有工作:

    public class DataValidator : AbstractValidator<Data>
    {
        public DataValidator()
        {
            RuleForEach(d => d.Ids).NotNull().NotEmpty();
        }
    }

1 个答案:

答案 0 :(得分:2)

您可以链接验证器:

public class DataValidator : AbstractValidator<Data>
    {
        public DataValidator()
        {
            RuleFor(d => d.Ids)
                .NotNull() //validates whether Ids collection is null
                .NotEmpty() //validates whether Ids collection is empty
                .SetCollectionValidator(new GuidValidator()); //validates each element inside Ids collection using GuidValidator
        }
    }

此外,由于Guid是一个结构,因此您不必在NotNull()内使用GuidValidator验证:

public class GuidValidator : AbstractValidator<Guid>
    {
        public GuidValidator()
        {
            RuleFor(x => x).NotEmpty();
        }
    }