【问题标题】:FluentValidation Validators inside RuleSet does not get executedRuleSet 中的 FluentValidation 验证器未执行
【发布时间】:2020-05-06 04:36:59
【问题描述】:

我有一个带有规则集的验证器

public class ApplicationValidator : AbstractValidator<Application>
{
    public ApplicationValidator()
    {
        RuleSet("CreateApplication", () =>
        {
            RuleFor(a => a.SalesChannelBroker)
                .SetValidator(new BrokerActiveRule());

            RuleFor(ld => ld.LoanDetailSegment)
                .SetValidator(new ProductCodeValidRule());
        });
    }
}

但是当我执行如下验证时,规则没有被验证,为什么?

// Validate
var validationResult = new ApplicationValidator().Validate(app, ruleSet: "CreateApplication");

【问题讨论】:

    标签: c# .net validation fluentvalidation


    【解决方案1】:

    您的BrokerActiveRuleProductCodeValidRule 验证器是什么样的? 规则是否在 CreateApplication 规则集中定义?

    如果它们不在规则集中,或者不在CreateApplication 之外的规则集中,则不会调用它们。

    子验证器的行为我仍然觉得有点奇怪,但基本上如果您使用规则集调用父验证器,并且您希望调用您的子验证器,则包含(在这种情况下为SetValidator)必须在规则集,您要应用的子验证器规则也必须在该规则集中。

    请参阅this 了解更多信息。

    可以通过创建您自己的IValidatorSelector 来自定义此行为。这是我正在考虑做的事情(但还没有完成),因为我有一个子验证器具有默认和规则集特定规则的情况,这意味着我必须在父验证器中包含两次子验证器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多