我将项目更新为最新版本的Fluent Validation,我收到警告:
'AbstractValidator<AccountSignInModel>.Custom(Func<AccountSignInModel, ValidationFailure>)'
is obsolete: 'Use model-level RuleFor(x => x) instead'
当我使用以下代码时:
When(x => !String.IsNullOrEmpty(x.Password) && !String.IsNullOrEmpty(x.Username), () => {
Custom(x => {
Boolean valid = service.ValidateCredentials(x.Username, x.Password));
if (!valid)
return new ValidationFailure("Credentials", "Authentication failed");
return null;
});
});
我不知道如何将其转换为RuleFor(x => x)
。
或者是否有另一种自定义替代方案?
答案 0 :(得分:0)
我们最近决定在我们的申请中使用Fluent Validation。所以我对此很陌生,在我们前进的过程中想办法。
在搜索其他问题时偶然发现了您的问题。这方面资源不多。我想我会分享我的想法,如果它可以帮助你。 这就是我要做的。
public NewCustomValidator(Interface int)
{
CascadeMode = CascadeMode.Continue; // you could use StopOnFirstFailure or Continue
RuleFor(x=> x.UserName).NotEmpty(); // Will return an error if null or empty
RuleFor(x=> x.Password).NotEmpty();
RuleSet("SomeNameHere", () =>
{
CascadeMode = CascadeMode.StopOnFirstFailure;
var isValid = false;
RuleFor(x=> new { x.UserName, x.Password })
.Must((u , p) =>
{
valid = ValidateCredentials(u, p);
return valid;
})
.WithMessage("You can show any message if you want");
RuleFor(x => x.UserName).Must((s) => isValid);
RuleFor(x => x.Password).Must((s) => isValid);
});
}
所以,我基本上使用你的方法在规则集中定义。您可能必须添加一些代码来验证规则集。
var result = validator.Validate(NewCustom, ruleSet: "SomeNameHere");
免责声明:此代码可能无法编译。但它会让你了解如何解决问题。如果您有更好的想法或如果您可以使代码工作,请发布答案。这将有助于我获得更多的知识。感谢。