c# - Fluent Validation - 当特定验证失败时停止验证所有其他验证

标签 c# asp.net-mvc validation fluentvalidation

我正在使用 Fluent Validation 进行服务器端验证。我已经创建了一组将被验证的规则。所有这些规则都是我的验证器中的独立功能。

 public SampleValidator()
{
            Validate_Authorisation();
            ValidateTitle_NotEmpty();
            ValidateGender_NotEmpty();
            ValidateFirstName_Regex();
            ValidateFirstName_NotEmpty();
            ValidateSurname_NotEmpty();
            ValidateSurname_Regex();
            ValidateMobilePhone_Regex();
}

private void Validate_Authorisation()
        {
            RuleFor(Model=> Model)
                .Must(Model=> IsUserAuthorised(UserName))
                .WithName("Authorisation Check");
        }

 private void ValidateTitle_NotEmpty()
        {
            RuleFor(model=> model)
            .Must(title=> !string.IsNullOrEmpty(title))
            .WithName("Title");
             }
        private void ValidateGender_NotEmpty()
        {
            RuleFor(model=> model)
              .Must(Gender=> !string.IsNullOrEmpty(Gender))
               .WithName("Gender");
        }.... And others

现在,我想在我的授权验证失败时停止验证所有其他验证。我不想使用 CascadeMode.StopOnFirstFailure 因为它总是检查第一次验证失败并停止验证其他人。当授权验证失败时,有没有一种方法可以返回服务(从调用验证器的地方)。

最佳答案

如果您将 Validate_Authorisation 方法更改为以下内容:

private IRuleBuilderOptions<Model, string> Validate_Authorisation()
{
    RuleFor(Model=> Model)
        .Must(Model=> IsUserAuthorised(UserName))
        .WithName("Authorisation Check");
}

然后您可以使用 dependentRules 扩展方法执行以下操作:

Validate_Authorisation().DependentRules(rules =>
{
    ValidateTitle_NotEmpty();
    ValidateGender_NotEmpty();
    ValidateFirstName_Regex();
    ValidateFirstName_NotEmpty();
    ValidateSurname_NotEmpty();
    ValidateSurname_Regex();
    ValidateMobilePhone_Regex(); 
});

关于c# - Fluent Validation - 当特定验证失败时停止验证所有其他验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30928287/

相关文章:

c# - 如何使用U-SQL自定义提取器动态输出多个文件?

validation - 用户输入的值在 JSF 中验证后消失

javascript - 如何在 Angular.js 中创建带参数的验证属性?

javascript - 如何执行输入字段验证并防止在字段为空时添加新行?

c# - 有什么办法可以使它成为更快的算法吗?

c# - WPF 工具包 DataGrid 显示字段,即使可浏览属性设置为 false

c# - .NET 的不同 MVC 框架的优缺点

c# - 将 ActionResult 呈现为字符串 - 输出顺序不正确

c# - 使用 FSharp.Data 将 Web 应用程序部署到 Azure 网站

c# - ModelState.IsValid 在使用 MongoDB 时包含错误