【问题标题】:ASP.NET WEB API 2 - ModelBinding Firing twice per requestASP.NET WEB API 2 - ModelBinding 每个请求触发两次
【发布时间】:2016-06-23 17:21:30
【问题描述】:

我有一个自定义验证属性,当我通过 POST 向服务器发出请求时,会触发该属性的 IsValid 方法两次。

它导致返回的错误消息被重复。

我已经使用 Fiddler 检查了该请求只被触发过一次,所以情况是 1 个请求与模型绑定触发了两次。

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class MinimumAgeAttribute : ValidationAttribute
{
    private readonly int _minimumAge;

    public MinimumAgeAttribute(int minimumAge)
    {
        _minimumAge = minimumAge;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        DateTime date;

        if (DateTime.TryParse(value.ToString(), out date))
        {
            if (date.AddYears(_minimumAge) < DateTime.Now)
            {
                return ValidationResult.Success;
            }
        }

        return new ValidationResult("Invalid Age, Clients must be 18 years or over");
    }
}

【问题讨论】:

    标签: c# asp.net asp.net-web-api2 model-validation validationattribute


    【解决方案1】:

    问题确实是由 Ninject 引起的。有两个模型验证器提供程序注册了验证属性ModelValidatorProviderNinjectDefaultModelValidatorProvider。 就我而言,我只在 Ninject 配置文件中解绑了ModelValidatorProvider,在创建新内核的情况下:

    var kernel = new StandardKernel();
    kernel.Unbind<ModelValidatorProvider>();
    

    【讨论】:

      【解决方案2】:

      问题在于 Ninject,它使 ModelValidatorProvider 的数量增加了一倍。

      我已添加此绑定以防止出现此问题。

      container.Rebind<ModelValidatorProvider>().To<NinjectDefaultModelValidatorProvider>();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        • 2016-05-12
        • 2017-06-12
        • 2020-04-15
        相关资源
        最近更新 更多