逗人 我正在尝试使用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
,我的问题是我只想在列表中有值时验证列表。
我该如何解决?
答案 0 :(得分:6)
您可以将规则/验证器设置为仅在某些情况下使用When()进行调用。在您的示例中,代码将类似于:
public SCRequestValidator()
{
When(request => request.Attachments.Any(), () =>
{
RuleFor(request => request.Attachments)
.SetCollectionValidator(new AttachmentValidator());
});
}
因此,如果没有附件,CollectionValidator将不会被设置。