我正在尝试在 MVC 模型中验证此属性,该模型可以包含零个或多个以逗号分隔的电子邮件地址:
public class DashboardVM
{
public string CurrentAbuseEmails { get; set; }
...
}
问题是如何使用电子邮件地址的内置流利验证规则来做到这一点?现在我有一个使用 Must 和正则表达式的解决方案,它有效,但我不觉得它......足够优雅。
public DashboardVMValidator()
{
RuleFor(x => x.CurrentAbuseEmails).Must(BeValidDelimitedEmailList).WithMessage("One or more email addresses are not valid.");
}
private bool BeValidDelimitedEmailList(string delimitedEmails)
{
//... match very very long reg. expression
}
到目前为止,包括 RuleFor(...).EmailAddress() 在内的最接近的解决方案是在下面创建一个自定义验证器,并从字符串中对每封电子邮件调用验证,但由于某种原因这不起作用(AbuseEmailValidator 无法获取我的谓词 x => x - 在每封电子邮件上调用 validator.Validate 时)。
public class AbuseEmailValidator : AbstractValidator<string>
{
public AbuseEmailValidator()
{
RuleFor(x => x).EmailAddress().WithMessage("Email address is not valid");
}
}
有没有办法以某种简单的方式做到这一点?类似于此解决方案的东西,但使用一个字符串而不是字符串列表,因为我不能使用 SetCollectionValidator(或者我可以吗?):如何使用 Fluent Validation 验证列表中的每个字符串?