繁体   English   中英

流利的验证-将两个验证器组合在一个自定义验证器中

Fluent validation - group two validators in one custom validator

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下验证器类:

public class FranchiseInfoValidator : AbstractValidator<FranchiseInfo>
    {
        public FranchiseInfoValidator()
        {
            RuleFor(franchiseInfo => franchiseInfo.FolderName).NotEmpty().Matches("^[a-zA-Z0-9_.:-]+$").WithMessage("Invalid characters");
            RuleFor(franchiseInfo => franchiseInfo.ExeIconName).NotEmpty().Matches("^[a-zA-Z0-9_.:-]+$").WithMessage("Invalid characters");
            RuleFor(franchiseInfo => franchiseInfo.FullName).NotEmpty().Matches("^[a-zA-Z0-9_.:-]+$").WithMessage("Invalid characters");
            RuleFor(franchiseInfo => franchiseInfo.ShortName).NotEmpty().Matches("^[a-zA-Z0-9_.:-]+$").WithMessage("Invalid characters");        
    }

NotEmpty()Matches("^[a-zA-Z0-9_.:-]+$").WithMessage("Invalid characters")验证程序与自定义消息的所有属性都相同。 是否可以将它们分组在一个自定义验证器中,然后编写如下代码:

RuleFor(franchiseInfo => franchiseInfo.FolderName).SetValidator(new CustomValidator());

我已经做了一些自定义验证器,但在这种情况下还没有。 这可能吗? 我在文档中没有找到这样的例子。 此外,我想知道是否有可能做到这一点,所以是否还有另一个带有属性的验证器类可以应用相同的自定义验证器? 谢谢。

1 个回复

是的,它应该可以像这样工作

public class MyCustomValidator : PropertyValidator
    {

        public MyCustomValidator()
            : base("Property {PropertyName} has invalid characters.")
        {
        }

        protected override bool IsValid(PropertyValidatorContext context)
        {
            var element = context.PropertyValue  as string;
            return !string.IsNullOrEmpty(element) && Regex.IsMatch(element, "^[a-zA-Z0-9_.:-]+$");
        }
    }

用法:使用您的代码,或创建自己的扩展名

public static class MyValidatorExtensions {
   public static IRuleBuilderOptions<T, string> CheckIfNullAndMatches<T>(this IRuleBuilder<T, string> ruleBuilder) {
      return ruleBuilder.SetValidator(new MyCustomValidator<TElement>());
   }
}

然后用法是

RuleFor(franchiseInfo => franchiseInfo.FolderName).CheckIfNullAndMatches();

如果您需要更通用的验证器,也可以使用正则表达式作为参数...

doc 在这里

1 自定义验证器以在流畅验证中重用

我想在不重复验证相同属性的情况下实现流畅的验证。 我正在寻找一种方法,以便我可以重用验证。 我有如下三个类,除了 NewClass 继承 PageRequest 之外,Customer 和 NewClass 都是相同的。 Fluent 验证如下: 您可以在 customer 和 newc ...

3 流利的验证-自定义引导验证器不会触发

我有一个自定义的FleuntValidation验证规则,用于检查Guid是否有效; 我想使用它来检查Guid属性以获取有效的Guid,然后返回自定义错误消息。 但是,我的规则没有被执行,因为我猜该Guid无效,并且一些内置的check在它之前运行。 我如何禁用内置检查,以便达 ...

8 验证程序要求不能与自定义验证程序一起使用

我正在创建一个表单来创建一个新用户。 我正在使用自定义验证程序来验证密码并确认密码字段值是否匹配。 我已经将两个字段都设为必填字段,即它们不能为空。如果密码字段为空并且我尝试创建用户,则会显示错误。 但是当确认密码字段为空时不会引发任何错误。如果确认密码字段为空,我仍然无法创建用户,但我希 ...

9 淘汰验证 - 自定义验证器

我正在尝试验证孩子年龄的条目。 有效值为“&lt;1”和1-29。 为此,我正在尝试创建如下的自定义验证器。 我假设这些验证器按顺序工作,所以我一直在移动它们。 我测试的用例: 用户输入30,抛出'需要小于29'的错误 用户输入0或无,抛出'请说多大'错误 ...

10 -Validation.xml 文件与此

从 2021 年 7 月 16 日起,带有标题的 -validation.xml 文件 &lt;! DOCTYPE validators PUBLIC "- // OpenSymphony Group // XWork Validator 1.0.2 // EN" "http://st ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM