ASP.NET WEB API 2 - ModelBinding 每个请求触发两次
ASP.NET WEB API 2 - ModelBinding Firing twice per request
我有一个自定义验证属性,当我通过 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");
}
}
问题出在 Ninject,它使 ModelValidatorProviders 的数量增加了一倍。
我已经添加了这个绑定来防止这个问题。
container.Rebind<ModelValidatorProvider>().To<NinjectDefaultModelValidatorProvider>();
问题确实是由Ninject引起的。有两个模型验证程序提供程序注册了验证属性 ModelValidatorProvider
和 NinjectDefaultModelValidatorProvider
。
在我的例子中,我只在 Ninject 配置文件中取消绑定 ModelValidatorProvider
,在创建新内核的情况下:
var kernel = new StandardKernel();
kernel.Unbind<ModelValidatorProvider>();
我有一个自定义验证属性,当我通过 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");
}
}
问题出在 Ninject,它使 ModelValidatorProviders 的数量增加了一倍。
我已经添加了这个绑定来防止这个问题。
container.Rebind<ModelValidatorProvider>().To<NinjectDefaultModelValidatorProvider>();
问题确实是由Ninject引起的。有两个模型验证程序提供程序注册了验证属性 ModelValidatorProvider
和 NinjectDefaultModelValidatorProvider
。
在我的例子中,我只在 Ninject 配置文件中取消绑定 ModelValidatorProvider
,在创建新内核的情况下:
var kernel = new StandardKernel();
kernel.Unbind<ModelValidatorProvider>();