fluentvalidation SetCollectionValidator

时间:2016-05-24 08:43:18

标签: c# fluentvalidation

逗人 我正在尝试使用SetCollectionValidator验证对象列表,并且列表计数可能有0个对象或更多对象,因此验证返回错误,直到列表没有这样的项目

public class SCRequest
{
    public List<Attachment> Attachments { get; set; }
}

public class Attachment
{
    public int AttachmentId { get; set; }
    public string Name { get; set; }
    public string FileType { get; set; }
    public string FilePath { get; set; }
    public string FileUrl { get; set; }
}

现在用于验证ScRequest我执行以下操作

public SCRequestValidator()
{
    RuleFor(request => request.Attachments)
        .SetCollectionValidator(new AttachmentValidator());
}

并且为了验证附件,我执行以下操作

public AttachmentValidator()
{
    RuleFor(x => x.FileUrl)
        .NotNull()
        .WithMessage(ErrorMessage.B0001)
        .NotEmpty()
        .WithMessage("Not Allowed Empty");
}

当附件列表中有0个对象时,我得到的错误不是Not Allowed Empty,我的问题是我只想在列表中有值时验证列表。

我该如何解决?

1 个答案:

答案 0 :(得分:6)

您可以将规则/验证器设置为仅在某些情况下使用When()进行调用。在您的示例中,代码将类似于:

public SCRequestValidator()
{
    When(request => request.Attachments.Any(), () => 
    {
     RuleFor(request => request.Attachments)
         .SetCollectionValidator(new AttachmentValidator());
    });
}

因此,如果没有附件,CollectionValidator将不会被设置。