如何使用 FluentValidation 验证 Guid 列表

A.B*_*anc 5 c# fluentvalidation .net-core

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

    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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我也试过这个验证器,但没有用:

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

Dar*_*dan 7

您可以链接验证器:

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
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

public class GuidValidator : AbstractValidator<Guid>
    {
        public GuidValidator()
        {
            RuleFor(x => x).NotEmpty();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • @BozoJoe `GuidValidator` 检查 guid 是否为空 (2认同)