Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Net WebApi-CustomValidation方法调用两次_.net_Validation_Asp.net Web Api - Fatal编程技术网

.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中指定验证?是的,这似乎是不可能的。