自定义已过时

时间:2017-05-25 09:20:39

标签: fluentvalidation

我将项目更新为最新版本的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)

或者是否有另一种自定义替代方案?

1 个答案:

答案 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");

免责声明:此代码可能无法编译。但它会让你了解如何解决问题。如果您有更好的想法或如果您可以使代码工作,请发布答案。这将有助于我获得更多的知识。感谢。