2017-05-25 74 views
1

我更新了一个项目,以流利的验证的最新版本,我得到一个警告:自定义已经过时了

'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

我们决定最近在我们的应用程序上使用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"); 

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