【发布时间】:2020-11-27 14:59:47
【问题描述】:
我正在尝试手动验证具有属性 (Questions) 的模型 (PageModel),该属性是多态类型的 IEnumerable。我无法让它自动工作,所以我尝试使用下面的代码。
public IActionResult Submit([FromServices] IValidatorFactory factory, [FromForm] PageModel model)
{
foreach ( var question in model.Questions )
{
Type questionType = question.GetType();
var validator = factory.GetValidator(question.GetType());
var results = validator.Validate(ValidationContext.CreateWithOptions(question));
results.AddToModelState(ModelState, null);
}
但是,IValidator.Validate() 不采用模型 (question),而是需要 ValidationContext<T> 或 IValidationContext,如果在编译时不知道验证器的类型,我都无法创建它们。
文档中的手动验证示例显示正在创建一个特定的验证器,但我希望 FluentValidation 能够在工厂中找到正确的验证器,然后调用它。
有人知道怎么做吗?
【问题讨论】:
标签: c# asp.net-core-mvc asp.net-core-3.1 fluentvalidation