簡體   English   中英

FluentValidation不使用我的規則

[英]FluentValidation not using my Rules

我正在將FluentValidation與Autofac和ValidatorFactoryBase一起使用

當我執行項目時,我的驗證程序將執行,但是當我發送帖子時,不會使用我的規則,但當前的驗證程序是我自己的驗證程序。

我的驗證者:

public class UsuarioCadastrarValidator : AbstractValidator<UsuarioCadastrarVM>
{
    public UsuarioCadastrarValidator()
    {
        RuleFor(a => a.Nome).NotEmpty().WithMessage("Campo obrigatório");

        RuleFor(a => a.Nome).Length(4, 200).WithMessage("Digite seu nome completo");
    }
}

我的模特:

public class UsuarioCadastrarVM
{
    public string Nome { get; set; }
    public int CargoId { get; set; }
}

Global.asax(效果很好):

...
    FluentValidationModelValidatorProvider.Configure();


            var assembly = Assembly.GetExecutingAssembly();

            builder.RegisterAssemblyTypes(assembly)
                   .Where(t => t.Name.EndsWith("Validator"))
                   .AsImplementedInterfaces()
                   .InstancePerLifetimeScope();


            builder.RegisterAssemblyTypes(assembly);

            builder
            .RegisterType<FluentValidation.Mvc.FluentValidationModelValidatorProvider>()
            .As<ModelValidatorProvider>();

            builder.RegisterType<AutofacValidatorFactory>().As<IValidatorFactory>().SingleInstance();

            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
...

控制器(效果很好):

[HttpPost]
public ActionResult Cadastrar(UsuarioCadastrarVM vm)
{
      if(ModelState.IsValid)
      {

      }
}

我的ValidatorFactoryBase(效果很好):

public class AutofacValidatorFactory : ValidatorFactoryBase
{
    private readonly IComponentContext _context;

    public AutofacValidatorFactory(IComponentContext context)
    {
        _context = context;
    }

    public override IValidator CreateInstance(Type validatorType)
    {
        object instance;
        if (_context.TryResolve(validatorType, out instance))
        {
            var validator = instance as IValidator;
            return validator;
        }

        return null;
    }
}

當我在ModelState中發送帶有“ Nome”和“ CargoId”為空的Post時,只有一條消息“ CargoId是必需的”,並且不存在該Rule,我認為這是因為CargoId是整數。

但是,為什么不考慮我的規則?

問題是CargoId是一個整數,因此MVC無法將我的帖子綁定到ViewModel,因為在我的測試中,我發送了一個空值,如果我將值發送給CargoId或更改為可為null( int? ),則驗證有效好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM