.net FluentValidation -允许数组中的精确索引为空值

ahy6op9u  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(167)

我正在使用FluentValidation来验证我的表单。
我有一个输入字段,它是字符串[],最多5个元素,我需要将该输入转换为要求**Elements[1][2][3]**值为NotEmpty(),NotEmpty()和MinLength(2),MaxLength(250)。

**元素[4]和[5]**应该允许Empty或需要MinLength(2),MaxLength(25)和NotLength()。

我该怎么做?因为我并不总是发送该数组的5个元素,所以它可能在3-5的范围内,并且我在当前解决方案中获得了IndexOutOfRangeException
我现在有这个代码

When(x => x.Elements.Length <= 3, () =>
        {
            RuleForEach(x => x.Elements).NotEmpty().WithMessage(ValidationMessage.Required);
            RuleForEach(x => x.Elements).NotNull().WithMessage(ValidationMessage.Required);
            RuleForEach(x => x.Elements).MaximumLength(AppConstants.MaxChars).WithMessage(ValidationMessage.MaxLength);
            RuleForEach(x => x.Elements).MinimumLength(AppConstants.MinChars).WithMessage(ValidationMessage.MinLength);
        });
        When(x => x.Elements.Length > 3 && x.Elements.Length <= 5, () =>
        {
            RuleForEach(x => x.Elements).MaximumLength(AppConstants.MaxChars).WithMessage(ValidationMessage.MaxLength);
            RuleForEach(x => x.Elements).MinimumLength(AppConstants.MinChars).WithMessage(ValidationMessage.MinLength);
            RuleForEach(x => x.Elements).NotNull().WithMessage(ValidationMessage.Required);
            RuleFor(x => x.Elements[3]).MaximumLength(AppConstants.MaxChars).WithMessage(ValidationMessage.MaxLength).When(el => el.Elements[3] != string.Empty);
            RuleFor(x => x.Elements[3]).MaximumLength(AppConstants.MinChars).WithMessage(ValidationMessage.MinLength).When(el => el.Elements[3] != string.Empty);
            RuleFor(x => x.Elements[4]).MaximumLength(AppConstants.MaxChars).WithMessage(ValidationMessage.MaxLength).When(el => el.Elements[4] != string.Empty);
            RuleFor(x => x.Elements[4]).MaximumLength(AppConstants.MinChars).WithMessage(ValidationMessage.MinLength).When(el => el.Elements[4] != string.Empty);
        });
46scxncf

46scxncf1#

这是一个数组索引从0开始的混乱情况。
你设定的条件是

x.Elements.Length > 2 && x.Elements.Length <= 4

并试图访问

x.Elements[3]
x.Elements[4]

然而,在这方面,

  • x.Elements[3]Elements.Length >= 4时为有效索引
  • x.Elements[4]只有一个有效的索引时,Elements.Length >= 5。

所以你的when条件应该改为

x => x.Elements.Length >= 4 && x.Elements.Length <= 5

如果你显式地检查Elements[3] && Elements[4]

相关问题