要复制的步骤:
start()
以具有方法:ValuesController
使用一个属性创建Input模型类:
public string Get([FromUri] Input input)
使用仅返回
[CustomValidation(typeof(StringValidator), "Validate")]
public string Thing { get; set; }
的{{1}}方法创建一个简单的StringValidator
类,并在该方法中添加一个断点。
启动API并按如下所示调用方法:Validate
断点将被击中两次,两次传入的值都将是“某物”
有人知道为什么会这样吗?我尝试从ValidationResult/.Success
的过滤器中删除默认的http://localhost:49394/api/values?thing=something
,但这仍然导致验证方法被触发两次。
答案 0 :(得分:1)
它在set
和get
之后运行验证。从set
属性中删除Thing
,验证方法将只运行一次。
答案 1 :(得分:0)
我在net core 3.1 API中遇到了类似的问题。以我为例,ApiController正在执行第一次验证,而我正在控制器中手动触发第二次验证。
我通过禁用Startup.cs中的内置验证来解决此问题:
services.AddControllers(o => {
o.ModelValidatorProviders.Clear();
});
请注意,这将完全禁用所有控制器上的验证。不过,您仍然可以手动验证模型。