【问题标题】:How to stop on first items failure FluentValidation RuleForEach如何在第一个项目失败时停止 FluentValidation RuleForEach
【发布时间】:2021-06-22 01:13:31
【问题描述】:

我的对象中有一个嵌套集合属性。我需要让它在收集项目的第一次失败时停止。我的意思是错误消息不应该针对每个失败项目重复。级联不适用于这种情况。谢谢:)

我的对象:

public class Customer{    
   public string CustomerName{get;set;}   
   public List<Order> Orders {get;set;} 
}

public class Order{
   public string OrderNumber{get;set;}
   public int Amount{get;set;}
}

示例请求:

{
    CustomerName="test",
    Orders:[
        {
            "OrderNumber":null,
            "Amount":0
        },
        {
            "OrderNumber":"",
            "Amount":null
        },
        {
            "OrderNumber":"12345",
            "Amount":0
        }
    ]
}

我对嵌套对象使用流畅的验证,如下所示。但是当它运行时,错误消息是重复的。它应该在第一个项目失败时停止。

代码:

this.RuleForEach(x => x.Orders).Cascade(CascadeMode = CascadeMode.Stop).SetValidator(new ShipmentListRequestItemValidator()));

错误输出(实际):

"OrderNumber is null!", "OrderNumber is empty!", "Amount should be greater than 0"

错误输出(应该是):

"OrderNumber is null!"

【问题讨论】:

    标签: .net-core fluentvalidation


    【解决方案1】:

    您可以覆盖 ValidationResult 以获取第一个错误。 像这样:

        public override ValidationResult Validate(ValidationContext<TestEntity> context)
                {
                     List<ValidationFailure> mainErrors = new List<ValidationFailure>();
                     mainErrors.Add(base.Validate(context).Errors.FirstOrDefault());
                     return new ValidationResult(mainErrors);
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2013-03-30
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      相关资源
      最近更新 更多