model.isvalid mvc servicesstack свободная проверка

Я использую стек служб библиотеки, и у меня возникла проблема с использованием библиотеки ServiceStack.FluentValidation.Mvc3. Я выполнил шаги по настройке этой библиотеки, чтобы механизм asp.net mvc распознавал свойство Model.IsValid, но это всегда было так. Вот фрагмент кода для настроек проверки, которые у меня есть в моем приложении.

public class AppHost: AppHostBase
{
    public AppHost() : base("Api Services", typeof(AppHost).Assembly)
    {
    }
    //Provide extra validation for the registration process
    public class CustomRegistrationValidator : RegistrationValidator
    {
        public CustomRegistrationValidator()
        {
            RuleSet(ApplyTo.Post, () =>
            {
                RuleFor(x => x.DisplayName).NotEmpty().WithMessage("Ingresa tu nombre de usuario");
                RuleFor(x => x.LastName).NotEmpty().WithMessage("Ingresa tu apellido");
                RuleFor(x => x.Name).NotEmpty().WithMessage("Ingresa tu nombre");
            });
        }
    }

    public class CustomAuthValidator : AbstractValidator<Auth>
    {
        public CustomAuthValidator()
        {
            RuleFor(x => x.UserName).NotEmpty().WithMessage("Ingresa tu nombre de usuario").WithName("Nombre de Usuario");
            RuleFor(x => x.Password).NotEmpty().WithMessage("Ingresa tu contraseña").WithName("Contraseña");
        } 
    }
    public override void Configure(Container container)
    {
        container.Adapter = new WindsorContainerAdapter();

        Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
            new CredentialsAuthProvider(),    
            new BasicAuthProvider()}));


        Plugins.Add(new RegistrationFeature());
        Plugins.Add(new ValidationFeature());

        container.RegisterAs<CustomRegistrationValidator, IValidator<Registration>>();
        container.RegisterAs<CustomAuthValidator, IValidator<Auth>>();

        FluentValidationModelValidatorProvider.Configure();

        container.Register<IRedisClientsManager>(c => new PooledRedisClientManager("localhost:6379"));
        container.Register(c => c.Resolve<IRedisClientsManager>().GetCacheClient()).ReusedWithin(Funq.ReuseScope.None);

        container.Register<IResourceManager>(new ConfigurationResourceManager());



        ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container));
        ServiceStackController.CatchAllController = reqCtx => container.TryResolve<AccountController>();

    }


    public static void Start()
    {
        new AppHost().Init();
    } 
}

ошибки сообщения являются ошибками по умолчанию, не меняют имя меток, которые я установил в отображаемом коде.

Вот фрагмент кода, чтобы увидеть, действительна ли модель или нет, в контроллере Account.

[HttpPost]
public ActionResult LogOn(Auth model, string returnUrl)
{
    //This always is true
    if (ModelState.IsValid)
    {
        //TODO: Save database and other action more
    }
    return View(model);
}

Пожалуйста помоги.


person Emilio Montes    schedule 25.05.2013    source источник


Ответы (1)


Это должно работать, хотя я не знаю, лучшее ли это решение

Подкласс проверки подлинности и его атрибут с помощью ValidatorAttribute

[Validator(typeof(CustomAuthValidator))]
public class MyAuth : Auth
{
}

Измените свой CustomAuthValidator, чтобы использовать новый тип MyAuth

public class CustomAuthValidator : AbstractValidator<MyAuth>
{
    public CustomAuthValidator()
    {
        RuleFor(x => x.UserName).NotEmpty().WithMessage("Ingresa tu nombre de usuario").WithName("Nombre de Usuario");
        RuleFor(x => x.Password).NotEmpty().WithMessage("Ingresa tu contraseña").WithName("Contraseña");
    }
}

Измените контроллер, чтобы использовать новый тип MyAuth

[HttpPost]
public ActionResult LogOn(MyAuth model, string returnUrl)
{
    //This should now work as expected
    if (ModelState.IsValid)
    {
        //TODO: Save database and other action more
    }
    return View(model);
}
person paaschpa    schedule 29.05.2013