Asp.net mvc 4 使用Fluent验证的条件登录验证
我正在尝试使用它,一开始似乎很容易使用,但现在出现了一些问题。我需要验证SignIn view模型,如下所示:Asp.net mvc 4 使用Fluent验证的条件登录验证,asp.net-mvc-4,fluentvalidation,Asp.net Mvc 4,Fluentvalidation,我正在尝试使用它,一开始似乎很容易使用,但现在出现了一些问题。我需要验证SignIn view模型,如下所示: public SignInViewModelValidator(IMembershipService membershipService) { _membershipService = membershipService; RuleFor(x => x.EMail).NotEmpty().EmailAddress(); R
public SignInViewModelValidator(IMembershipService membershipService)
{
_membershipService = membershipService;
RuleFor(x => x.EMail).NotEmpty().EmailAddress();
RuleFor(x => x.Password).NotEmpty().Length(6, 20);
Custom(x =>
{
var user = _membershipService.ValidateUser(x.EMail, x.Password);
if (user == null)
return new ValidationFailure("EMail", "Your E-Mail Address or password was invalid.");
return null;
});
}
但是我一次就得到了所有的错误,就像这样:
- “电子邮件”不应为空
- 您的电子邮件地址或密码无效
- “密码”不应为空
IsValidEmailAndPassword
),并使用该方法验证电子邮件和密码。由于要将多个参数(电子邮件和密码)传递到该方法中,请阅读有关“接受正在验证的父对象实例”的Must
重载的文档,以实现此规则
希望这些链接能为您指明正确的方向。只有在电子邮件/密码规则有效时,您才可以使用该方法检查自定义规则
为了简化此操作,我建议将自定义规则逻辑移到一个单独的方法中(类似于IsValidEmailAndPassword
),并使用该方法验证电子邮件和密码。由于要将多个参数(电子邮件和密码)传递到该方法中,请阅读有关“接受正在验证的父对象实例”的Must
重载的文档,以实现此规则
希望这些链接能为您指明正确的方向。我是这样管理的:
public SignInViewModelValidator(IMembershipService membershipService){
_membershipService = membershipService;
bool firstPhasePassed = true;
RuleFor(x => x.EMail)
.NotEmpty().WithMessage("")
.EmailAddress().WithMessage("")
.OnAnyFailure(x => { firstPhasePassed = false; });
RuleFor(x => x.Password)
.NotEmpty().WithMessage("")
.Length(6, 16).WithMessage("")
.OnAnyFailure(x => { firstPhasePassed = false; });
When(x => firstPhasePassed, () =>
{
Custom(x =>
{
if (_membershipService.ValidateUser(x.EMail, x.Password) == null)
return new ValidationFailure("EMail", "");
return null;
});
});
}我是这样管理的:
public SignInViewModelValidator(IMembershipService membershipService){
_membershipService = membershipService;
bool firstPhasePassed = true;
RuleFor(x => x.EMail)
.NotEmpty().WithMessage("")
.EmailAddress().WithMessage("")
.OnAnyFailure(x => { firstPhasePassed = false; });
RuleFor(x => x.Password)
.NotEmpty().WithMessage("")
.Length(6, 16).WithMessage("")
.OnAnyFailure(x => { firstPhasePassed = false; });
When(x => firstPhasePassed, () =>
{
Custom(x =>
{
if (_membershipService.ValidateUser(x.EMail, x.Password) == null)
return new ValidationFailure("EMail", "");
return null;
});
});
}