我正在使用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);
});
1条答案
按热度按时间46scxncf1#
这是一个数组索引从0开始的混乱情况。
你设定的条件是
并试图访问
然而,在这方面,
x.Elements[3]
仅当Elements.Length
>= 4时为有效索引x.Elements[4]
是只有一个有效的索引时,Elements.Length
>= 5。所以你的when条件应该改为
如果你显式地检查
Elements[3] && Elements[4]