Fluent 验证处理异常

Fluent Validation Handle Exception

我在 AbstractValidator class 中定义了一些自定义规则,我希望当规则定义中存在内部异常(例如 NullReferenceException)时,验证过程 return 错误 集合。现在,当遇到异常时,验证停止并抛出该异常。

 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)中发生的事情。

是否有任何选项可以实现这种行为?

我还没有机会自己测试这个,但你应该能够在 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)