【问题标题】:Fluent Validation Handle ExceptionFluent 验证处理异常
【发布时间】:2021-01-08 05:07:30
【问题描述】:

我在 AbstractValidator 类中定义了一些自定义规则,我希望当规则定义中有内部异常(例如 NullReferenceException)时,验证过程在 Errors 集合中返回它。现在,当遇到异常时,验证停止并抛出该异常。

 RuleFor(order => order.Products).Must(products =>
{
    HashSet<string> domains = products
        .SelectMany(product => product.Stock.Domains)
        .Select(domain => domain.Name)
        .ToHashSet();

    return domains.Count >= distinctDomains;
}).When(order => order.Products.Count >= maxProductsCount)

例如当 Domains 属性为 null 时,将引发异常并停止验证。我希望验证过程继续进行,并以某种方式附加 Errors 集合中发生的事情(来自 ValidationException)。

有没有办法获得这样的行为?

【问题讨论】:

    标签: c# fluentvalidation


    【解决方案1】:

    我自己没有机会对此进行测试,但是您应该能够在 Must 验证器中捕获异常,然后将规则消息(使用当前上下文)设置为异常的错误消息(或任何您想要的)。这使您无需使用 WithMessage 方法,而只需在逻辑中设置消息。这将捕获异常并允许处理继续,但异常消息作为错误。

    类似:

    RuleFor(order => order.Products).Must((order, products, context) =>
    {
        try {
           HashSet<string> domains = products
              .SelectMany(product => product.Stock.Domains)
              .Select(domain => domain.Name)
              .ToHashSet();
    
           return domains.Count >= distinctDomains;
        }
        catch (Exception ex) {
            context.Rule.MessageBuilder = c => ex.Message;
            return false;
        }
    }).When(order => order.Products.Count >= maxProductsCount)
                
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-07
      • 2012-10-15
      • 1970-01-01
      • 2011-04-08
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多