我找不到询问确切考试问题的问题,所以我自己写了一个。
我必须验证具有多个字符串属性的模型。每个字符都可以是
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
之外的变量,但我不确定这种特殊的方法。
我认为 NotEmpty 和长度验证器就是你想要的
RuleFor(customer => customer.Surname).NotEmpty().Length(1, 250);
.NotEmpty() 表示不能为 null 或为空
.长度(1, 250); //必须介于 1 到 250 个字符之间(含)