C# Fluent Validation validator甚至在向其添加验证代码之前都会导致错误

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

我正在尝试使用Contoso大学项目进行流畅的验证

因此,我向现有类添加了一个验证器属性:

[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);