【问题标题】:.Net WebApi - CustomValidation methods called twice.Net Web Api - 调用两次的自定义验证方法
【发布时间】:2018-10-01 10:29:10
【问题描述】:

复制步骤:

  • 开始一个新的 .Net WebApi 2 项目
  • 改变ValuesController 有一个方法:public string Get([FromUri] Input input)
  • 使用一个属性创建输入模型类: [CustomValidation(typeof(StringValidator), "Validate")] public string Thing { get; set; }

  • 使用仅返回 ValidationResult/.Success 的 Validate 方法创建一个简单的 StringValidator 类,并在该方法中设置断点。

  • 启动 API 并像这样调用方法:http://localhost:49394/api/values?thing=something

  • 断点会被命中两次,两次传入的值都是“something”

有人知道为什么会这样吗?我已经尝试从HttpConfiguration 的过滤器中删除默认的ActionDescriptorFilterProvider,但这仍然会导致验证方法被触发两次。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 嘿,为回复干杯。如果没有设置器,尽管框架无法设置值:)。你知道是否有办法只在 Set 上指定验证,而不在 Get 上指定验证?
    • 是的,好像不可能。
    【解决方案2】:

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

    我通过禁用 Startup.cs 中的内置验证解决了这个问题:

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 1970-01-01
      • 2014-09-17
      • 2014-07-12
      • 1970-01-01
      • 2021-11-21
      • 2016-11-16
      • 1970-01-01
      • 2015-05-18
      相关资源
      最近更新 更多