FluentValidation 和 IList<T> 属性



我想将列表验证规则拉到特定于列表的类中,但是我在验证列表不为空和不为空时遇到麻烦。

这是我的意思的一个模型:

public class SomeAppData
{
public IList<UserDetails> Users { get; set; } = new List<UserDetails>();
}

public class UserDetails
{
public string UserId { get; set; } = "";
public string RoleId { get; set; } = "";
}

public class ListOfUsersValidator : AbstractValidator<IList<UserDetails>>
{
public ListOfUsersValidator()
{
// list cannot be null or empty (i.e. at least 1 user is required
RuleFor(list => list).NotNull().NotEmpty();
// each userid and roleid cannot be more than 50 characters long
RuleForEach(list => list)
.ChildRules(user => {
user.RuleFor(x => x.UserId).MaximumLength(50);
user.RuleFor(x => x.RoleId).MaximumLength(50);
});
}
}

public class SomeAppDataValidator : AbstractValidator<SomeAppData>
{
public SomeAppDataValidator()
{
RuleFor(x => x.Users).SetValidator(new ListOfUsersValidator);
}
}
在ListOfUsersValidator中,这段代码:"RuleFor(list =>列表).NotNull () .NotEmpty();"是无效的。无论列表是空还是空,它都不会报告错误。

如果我让SomeAppDataValidator做验证,见下面,然后它工作:

public class SomeAppDataValidator : AbstractValidator<SomeAppData>
{
public SomeAppDataValidator()
{
RuleFor(x => x.Users)
.NotNull().NotEmpty()
.SetValidator(new ListOfUsersValidator);
}
}

我哪里错了,有什么想法吗?

这可能有用:

public class ListOfUsersValidator : AbstractValidator<IList<UserDetails>>
{
public ListOfUsersValidator()
{
// list cannot be null or empty (i.e. at least 1 user is required
RuleFor(list => list).NotEmpty();
// each userid and roleid cannot be more than 50 characters long
RuleForEach(list => list)
.ChildRules(user => {
user.RuleFor(x => x.UserId).MaximumLength(50);
user.RuleFor(x => x.RoleId).MaximumLength(50);
});
}
public override ValidationResult Validate(ValidationContext<IList<UserDetails>> context)
{
return context.InstanceToValidate == null ?
new ValidationResult(new[] { new ValidationFailure("IList<UserDetails>", "List cannot be null") }) :
base.Validate(context);
}
}

null列表:

var data = new SomeAppData { Users = null };
var validator = new ListOfUsersValidator();
// results contains 1 error 'List cannot be null'
var results = validator.Validate(data.Users);
var validationSucceeded = results.IsValid; // is false

最新更新