FluentValidation 使用规则集在集合上设置验证器

FluentValidation set validator on collection with Ruleset

我正在创建一个 POST Rest API(ASP.NET Web API) 来执行写入操作,因此必须在将数据插入 Database.I 对使用 FluentValidation 验证数据还很陌生。 假设下面是我需要验证的 类。

public class Listing
{
    public Type Type { get; set; }
    public Source Source { get; set; }
    public List<ListingDetails> ListingDetails { get;set; }
}

public class ListingDetails 
{
    public int Id{ get; set; }
    public ListingStatus Status { get; set; }
}

public enum ListingStatus
{
    Active = 1,
    Converted = 2,
    LostToCompetitor = 3
}

下面的代码负责根据提供的规则集验证状态。

public class ListingStatusValidator : AbstractValidator<ListingDetails>
{
    public ListingStatusValidator() 
    {
        RuleSet("A", () =>
        {
            RuleFor(x=>x.InquiryId).GreaterThan(0);
        });
        RuleSet("B", () =>
        {
            RuleFor(x => x.Status).IsInEnum().NotEqual(ListingStatus.Active);
        });

        RuleSet("C", () =>
        {
            RuleFor(x => x.Status).IsInEnum();
        });
    }
}

下面是用于验证列表的代码。

public class ListingValidator : AbstractValidator<Listing>
{
    public ListingValidator()
    {
        RuleSet("common", () =>
        {
          When(x => x.ListingDetails != null && x.ListingDetails.Count <= 1000, () =>
            RuleForEach(x => x.ListingDetails).SetValidator(new ListingStatusValidator()));
        });

    }
} 

现在要验证我们将调用验证器的验证方法,如下所示。

var validation = new ListingValidator().Validate(listing,ruleSet:"common");

在 objects.Please 的集合上使用 setvalidator 进行验证时是否可以通过规则集?请参阅下面的代码片段以了解我要实现的目标。

public class ListingValidator : AbstractValidator<Listing>
{
    public ListingValidator()
    {
        When(x => x.ListingDetails != null && x.ListingDetails.Count <= 1000, () =>
            RuleForEach(x => x.ListingDetails).SetValidator(new ListingStatusValidator(),ruleset:"A,B,C"));
    }
} 

您可以使用 RulesetValidatorSelector

执行多个规则集
var validation = new ListingValidator()
    .Validate(listing, new RulesetValidatorSelector("common", "A", "B", "C"));

在这种情况下,您不需要为 ListingStatusValidator 指定规则集,来自 ListingValidator 的规则集将传递给嵌套验证器。