.Net WebApi-CustomValidation方法调用两次
复制的步骤:.Net WebApi-CustomValidation方法调用两次,.net,validation,asp.net-web-api,.net,Validation,Asp.net Web Api,复制的步骤: 启动新的.Net WebApi 2项目 更改ValuesController以获得一个方法:publicstringget([FromUri]Input-Input) 使用一个属性创建输入模型类: [CustomValidation(typeof(StringValidator),“Validate”)] 公共字符串对象{get;set;} 使用只返回ValidationResult/.Success的Validate方法创建一个简单的StringValidator类,并在该
- 启动新的.Net WebApi 2项目
- 更改
以获得一个方法:ValuesController
publicstringget([FromUri]Input-Input)
- 使用一个属性创建输入模型类:
[CustomValidation(typeof(StringValidator),“Validate”)] 公共字符串对象{get;set;}
- 使用只返回
的ValidationResult/.Success
方法创建一个简单的Validate
类,并在该方法中插入一个断点StringValidator
- 启动API并像这样调用方法:
http://localhost:49394/api/values?thing=something
- 断点将被命中两次,两次传入的值都是“某物”
有人知道为什么会这样吗?我已尝试从
HttpConfiguration
中的过滤器中删除默认的ActionDescriptorFilterProvider
,但这仍然会导致验证方法被触发两次。它在设置
和获取
之后运行验证。从属性中删除set
,验证方法将只运行一次。我在net core 3.1 API中遇到类似问题。在我的例子中,ApicController正在执行第一次验证,而我正在控制器中手动触发第二次验证
我通过禁用Startup.cs中的内置验证解决了此问题:
services.AddControllers(o => {
o.ModelValidatorProviders.Clear();
});
请注意,这将完全禁用所有控制器上的验证。不过,您仍然可以手动验证模型。嘿,欢迎回复。没有setter,尽管框架无法设置值:)。你们知道是否有一种方法可以只在集合中指定验证,而不在Get中指定验证?是的,这似乎是不可能的。