2

我有一个自定义验证属性,当我通过 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");
    }
}
4

2 回答 2

9

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

我添加了这个绑定来防止这个问题。

container.Rebind<ModelValidatorProvider>().To<NinjectDefaultModelValidatorProvider>();
于 2016-03-14T08:53:27.220 回答
0

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

var kernel = new StandardKernel();
kernel.Unbind<ModelValidatorProvider>();
于 2019-12-06T16:10:14.243 回答