C# Fluent Validation validator甚至在向其添加验证代码之前都会导致错误
我正在尝试使用Contoso大学项目进行流畅的验证 因此,我向现有类添加了一个验证器属性:C# Fluent Validation validator甚至在向其添加验证代码之前都会导致错误,c#,fluentvalidation,C#,Fluentvalidation,我正在尝试使用Contoso大学项目进行流畅的验证 因此,我向现有类添加了一个验证器属性: [Validator(typeof(PersonValidator))] public abstract class Person { public int ID { get; set; } [Required] [StringLength(50)] [Display(Name = "Last Name")] public string LastName { ge
[Validator(typeof(PersonValidator))]
public abstract class Person
{
public int ID { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "Last Name")]
public string LastName { get; set; }
}
我的PersonValidator
尚未执行任何操作:
public class PersonValidator : AbstractValidator<Person>
{
public PersonValidator()
{
}
}
…我得到一个错误:
不引人注目的客户端验证规则中的验证类型名称必须为
独一无二。多次看到以下验证类型:
必需的
对于同一个元素,我似乎没有多次进行相同的验证,那么为什么会出现错误呢?
Fluent验证可以与MVC的内置验证一起工作吗?如果您将FluentValidation与DataAnnotation一起使用,则可能会出现这种情况。尝试在应用程序启动时执行类似操作
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
FluentValidationModelValidatorProvider.Configure(provider => provider.AddImplicitRequiredValidator = false);
var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AttributedValidatorFactory());
ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider);
根据页面,您可以尝试删除DataAnnotations验证
与ASP.NET内置验证的兼容性默认情况下,在执行FluentValidation后,任何其他验证程序提供程序都将
也有机会执行。这意味着你可以混合
使用DataAnnotations属性(或任何其他ASP.NET)的FluentValidation
ModelValidator(提供程序实现)
如果要禁用此行为,以便FluentValidation是
只有执行的验证库,才能设置
在您的应用程序中,将DefaultMVCValidationAfterFluentValidationExecutes设置为false
应用程序启动例程:
services.AddMvc().AddFluentValidation(fv => {
fv.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
});
注意,如果您设置了
运行DefaultMVCValidationAfterFluentValidationExecutes为false,然后
对IValidatableObject的支持也将被禁用
希望这有帮助 我不确定为什么它会向字符串字段添加隐式必需的验证器,但当我将Fluent验证提供程序配置为不在我的
Global.asax.cs
文件中添加隐式必需的验证器时,问题就消失了:
FluentValidationModelValidatorProvider.Configure(provider
=> provider.AddImplicitRequiredValidator = false);
我不想更改任何现有数据批注的行为,因此我添加的就是这些看起来非常类似于此,即可以将FluentValidation与DataAnnotations属性混合使用。根据我的经验,您不能这样做。我怀疑是因为我添加了此代码以及标准的
FluentValidationModelValidatorProvider.Configure()
而不是它,所以出现了相同的错误。哼!
FluentValidationModelValidatorProvider.Configure(provider
=> provider.AddImplicitRequiredValidator = false);