【发布时间】:2020-06-13 06:54:04
【问题描述】:
我正在创建一个 asp.net 核心 web api 应用程序。 我在哪里尝试使用流利的验证来验证我的模型。
这是我的模型和验证器。
public class Data
{
public string Name { get; set; }
public int Age { get; set; }
}
public class DataValidator : AbstractValidator<Data>
{
public DataValidator()
{
RuleFor(x => x.Name)
.NotEmpty()
.MaximumLength(5);
RuleFor(x => x.Age)
.LessThan(80);
}
}
一切正常。 Fluent 验证将所有验证一起返回,但以下情况除外。
当我的请求包含以下 JSON 时,Fluent Validation 不会被命中。 进行 Asp.net 核心模型验证。 在这种情况下,我会收到单个验证错误。
{
"name": 123,
"Age" : 100
}
我收到以下验证消息。
无法将 JSON 值转换为 System.String。路径
- 如何覆盖上述默认消息?
- 在 Fluent Validation 中是否可以处理上述验证?
- 我希望将“姓名”和“年龄”验证消息放在一起。
【问题讨论】:
-
在该 JSON 中,名称不是字符串。它甚至可能没有触及任何验证中间件,它会尝试反序列化到您的模型失败。将名称值用双引号括起来。
-
@rgvlee 我可以覆盖反序列化机制吗?因为我想抛出数据类型不匹配验证错误。
-
是的;您必须准确确定导致问题的中间件组件(堆栈跟踪应该为您提供)。自定义模型绑定器可能允许您执行此操作。这里有一个相关的问题stackoverflow.com/a/57003369/2975810 涵盖了另一种方法。
标签: asp.net-core fluentvalidation