【发布时间】:2017-05-02 15:38:05
【问题描述】:
我正在尝试验证我的 webApi 2 中的输入对象列表。
但它没有验证。 Modelstate 始终设置为 true。
示例代码:
public class A
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ClassAValidator : AbstractValidator<A>
{
public classAValidator()
{
RuleSet("ClassA",()=>{
RuleFor(x => x.Id).NotEmpty().WithMessage("The Idcan't be Empty or Zero");
RuleFor(x => x.Name).NotEmpty().Length(10).WithMessage("Name Should be Six Char length");
});
}
}
注意:我们需要准确的字符串字段为 6 个字符。
API:
[HttpPut]
public async Task<IHttpActionResult> Put([FromBody] List<A> alist)
{
if(!ModelState.IsValid) throw new InvalidDataException(ModelState,"Data Validation Failed for Upload Class A");
// Model State is Always true
}
谁能指出我错过了什么?
更新: 我试过了Should i create a new Type for Collection in FluentValidation?
但仍然有同样的问题。
已解决的更新:
问题是规则集的使用导致验证未触发。在删除“RuleSet”时,即使没有定义 List[A] Validator 类,它也可以工作。
来自 Jeremy Skinner 的消息:第一个问题是您的规则被包装在一个规则集中,因此它们永远不会被执行。规则集是可选的,自动集成仅调用不在规则集中的规则。
【问题讨论】:
标签: c# asp.net asp.net-web-api fluentvalidation