c# - 如何使用 FluentValidation 验证 Guid 列表

标签 c# .net-core fluentvalidation

我正在尝试使用 Fluent Validation 来验证 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();
        }
    }

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

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

最佳答案

你可以只链接验证器:

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();
        }
    }

关于c# - 如何使用 FluentValidation 验证 Guid 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50042201/

相关文章:

c# - 具有返回值和异步/等待的并行执行

.net - 具有 fluidvalidation 的 Ninjects

c# - Entity Framework 6 深度复制/克隆具有动态深度的实体

c# - 具有可能的空对象的 Id 的 GroupBy

c# - DI,从工厂解决服务实现

nhibernate - 使用Fluent Validator验证Bool

c# - FluentValidation 正在请求 IValidator<string>

c# - 错误包管理器控制台

c# - 文本框和按钮未正确对齐

c# - 如何在 .NET Core 3.1 中访问和审核文件的安全性