对 null 或最小最大字符串长度进行流畅的验证检查

问题描述 投票:0回答:1

我找不到询问确切考试问题的问题,所以我自己写了一个。

我必须验证具有多个字符串属性的模型。每个字符都可以是

Null
或介于
1
100
字符之间。

我还有一些其他验证器使用这种方法:

RuleFor(model => model.Name)
            .Must(name => string.IsNullOrEmpty(name) || name.Length > minLength)
            .WithErrorCode(ErrorCodes.MinStringLength)
            .WithState(model => new
            {
                expected = minLength,
                actual = model.Name.Length
            });

但是我还需要检查

maxLength
,这基本上是重复上面的表达式,但是检查
name.Length < maxLength
。鉴于我必须以这种方式验证多个属性,我觉得可以进行一些优化来减少所需的代码量。

我开始实施但不知道如何让它发挥作用的一件事是:

RuleFor(model => model.Name)
            .Must(name => string.IsNullOrEmpty(name) || (name.Length > minLength || name.Length < maxLength))
            .WithErrorCode(name.Length <= minLength ? ErrorCodes.MinStringLength : ErrorCodes.MaxStringLength)
            .WithState(model => new
            {
                expected = model.Name <= minLength ? minLength : maxLength,
                actual = model.Name.Length
            });

这里的问题是,在

.WithErrorCode(..
中,我无法访问
name
model
。我想我可以将它们分配给
RuleFor
之外的变量,但我不确定这种特殊的方法。

c# fluentvalidation
1个回答
0
投票

我认为 NotEmpty 和长度验证器就是你想要的

RuleFor(customer => customer.Surname).NotEmpty().Length(1, 250);

.NotEmpty() 表示不能为 null 或为空

.长度(1, 250); //必须介于 1 到 250 个字符之间(含)

© www.soinside.com 2019 - 2024. All rights reserved.