.Net WebApi-CustomValidation方法被调用两次

时间:2018-10-01 10:29:10

标签: .net validation asp.net-web-api

要复制的步骤:

  • 开始一个新的.Net WebApi 2项目
  • 更改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,但这仍然导致验证方法被触发两次。

2 个答案:

答案 0 :(得分:1)

它在setget之后运行验证。从set属性中删除Thing,验证方法将只运行一次。

答案 1 :(得分:0)

我在net core 3.1 API中遇到了类似的问题。以我为例,ApiController正在执行第一次验证,而我正在控制器中手动触发第二次验证。

我通过禁用Startup.cs中的内置验证来解决此问题:

services.AddControllers(o => {
      o.ModelValidatorProviders.Clear(); 
});

请注意,这将完全禁用所有控制器上的验证。不过,您仍然可以手动验证模型。