如何使用FluentValidation验证Guid列表

9

我正在尝试使用Fluent Validation验证Guid列表。 我的Ids列表应该至少有一个Guid Id。 我进行了一些研究,并找到了类似的问题得到解答,最接近解决方案的是像下面这样实现,但它仍然不起作用。 当我发出请求时,即使我发送了具有值的Id列表,它也会给我错误消息,表示Value不能为空。 我做错了什么?

    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个回答

13

您可以将验证器链接在一起:

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是一个结构体,您不必在GuidValidator中使用NotNull()验证:

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

Guid.Empty的情况怎么办? - BozoJoe
2
@BozoJoe 的 GuidValidator 检查 guid 是否为空。 - Darjan Bogdan
1
NotEmpty()还会检查输入是否非空。 - M1sterPl0w

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接