我找不到要求确切的考试问题的问题,所以我正在写自己的问题。
我必须验证具有多个字符串属性的模型。它们每个可以是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
之外的变量,但是我不确定这种特定方法。