列表参数的FluentValidation



我们有一个现有的API端点,其签名如下(简化(:

[HttpPost("api/v1/data")]
public DataSubmission SubmitData([FromBody] List<DataItem> items) {
...
}
public class DataItemValidator : AbstractValidator<DataItem> {
// RuleFor(...)
}

我们已经为DataItem定义了一个验证器,但我们不知道如何在各个列表项上注册验证。对于列表作为属性公开的常规输入模型,使用RuleForEach(x => x.ListPropertyName).SetValidator(...)很方便,但当要验证的模型本身是列表时,我们找不到可以验证项的设置。

我们试图为这个列表定义一个派生模型,并为它创建一个验证器,如下所示:

public class DataItemList : List<DataItem> {
}
public class DataItemListValidator : AbstractValidator<DataItemList> {
public DataItemListValidator(){
// How to set validator for items list??
}
}

我们这样做是错误的,还是有其他方法来处理这种情况?

编辑:我知道FluentValidation不适合验证参数(https://github.com/FluentValidation/FluentValidation/issues/337)但我不确定这是否也适用,因为这似乎是一个灰色区域

(在发布问题后不久找到答案(

我们可以使用派生模型和特定的RuleForEach语法来实现验证:

public class DataListItemValidator : AbstractValidator<DataItemList> {
public DataListItemValidator() {
RuleForEach(x => x).SetValidator(new DataItemValidator());
}
}

这里的关键是(x => x),它允许迭代自身的元素。

相关内容

  • 没有找到相关文章

最新更新