gpt4 book ai didi

c# - 使用 fluentvalidation 检查另一条规则

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:58 25 4
gpt4 key购买 nike

我有以下代码来验证一个实体:

   public class AffiliateValidator : AbstractValidator<Affiliate>
{
public AffiliateValidator ()
{
RuleFor(x => x.IBAN).SetValidator(new ValidIBAN()).Unless( x => String.IsNullOrWhiteSpace(x.IBAN));
}
}

和 ValidIBAN() 代码:

public class ValidIBAN  : PropertyValidator
{
public ValidIBAN()
:base("IBAN \"{PropertyValue}\" not valid.")
{

}

protected override bool IsValid(PropertyValidatorContext context)
{
var iban = context.PropertyValue as string;
IBAN.IBANResult result = IBAN.CheckIban(iban, false);
return result.Validation == (IBAN.ValidationResult.IsValid);
}

}

所以,IBAN 类的 CheckIBAN 方法完成了肮脏的工作。

现在,我需要对另一个属性应用以下规则:如果 DirectDebit (bool) 为真,则 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() 的实例参数来做任何我想做的事。

关于c# - 使用 fluentvalidation 检查另一条规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30793191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com