Fluent验证句柄异常



我在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(。

有什么选择可以获得这样的行为吗?

我自己还没有机会对此进行测试,但您应该能够在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)

最新更新