C# 使用fluentvalidation检查另一个规则
我有以下代码来验证实体:C# 使用fluentvalidation检查另一个规则,c#,.net,validation,fluentvalidation,C#,.net,Validation,Fluentvalidation,我有以下代码来验证实体: public class AffiliateValidator : AbstractValidator<Affiliate> { public AffiliateValidator () { RuleFor(x => x.IBAN).SetValidator(new ValidIBAN()).Unless( x => String.IsNullOrWhiteSpace(x.IBAN)); }
public class AffiliateValidator : AbstractValidator<Affiliate>
{
public AffiliateValidator ()
{
RuleFor(x => x.IBAN).SetValidator(new ValidIBAN()).Unless( x => String.IsNullOrWhiteSpace(x.IBAN));
}
}
}
因此,IBAN类的CheckIBAN方法完成了肮脏的工作
现在,我需要对另一个属性应用以下规则:
如果DirectDebit(bool)为true,则IBAN不能为空,并且必须有效
我可以这样做:
RuleFor(x => x.DirectDebit).Equal(false).When(a => string.IsNullOrEmpty(a.IBAN)).WithMessage("TheMessage.");
但是我如何调用另一个规则,在本例中是IBAN的规则,以检查是否有效?通常问题比看起来更简单。这是我用来应用DirectDebit字段规则的解决方案
RuleFor(x => x.DirectDebit).Must(HaveValidAccounts).When(x => x.DirectDebit)
.WithMessage("TheMessage");
并更改IBAN的规则:
RuleFor(x => x.IBAN).Must(IsValidIBAN)
.Unless(x => String.IsNullOrWhiteSpace(x.IBAN))
.WithMessage("The IBAN \"{PropertyValue}\" is not valid.");
…然后:
private bool HaveValidAccounts(ViewModel instance, bool DirectDebit)
{
if (!DirectDebit)
{ return true; }
bool CCCResult = IsValidCCC(instance.CCC);
bool IBANResult = IsValidIBAN(instance.IBAN);
return CCCResult || IBANResult;
}
private bool IsValidIBAN(string iban)
{
return CommonInfrastructure.Finantial.IBAN.CheckIban(iban, false).Validation == IBAN.ValidationResult.IsValid;
}
诀窍是使用Must()的实例参数做任何我想做的事情 我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。@JohnSaunders:对不起。我不确定是什么贴在了标题上。但下次会记住“C#fluentvalidation检查另一条规则”
private bool HaveValidAccounts(ViewModel instance, bool DirectDebit)
{
if (!DirectDebit)
{ return true; }
bool CCCResult = IsValidCCC(instance.CCC);
bool IBANResult = IsValidIBAN(instance.IBAN);
return CCCResult || IBANResult;
}
private bool IsValidIBAN(string iban)
{
return CommonInfrastructure.Finantial.IBAN.CheckIban(iban, false).Validation == IBAN.ValidationResult.IsValid;
}