我正在使用Fluent Validation进行服务器端验证。我已经创建了一组将被验证的规则。所有这些规则都是我的验证器中的单个函数。
public SampleValidator()
{
Validate_Authorisation();
ValidateTitle_NotEmpty();
ValidateGender_NotEmpty();
ValidateFirstName_Regex();
ValidateFirstName_NotEmpty();
ValidateSurname_NotEmpty();
ValidateSurname_Regex();
ValidateMobilePhone_Regex();
}
private void Validate_Authorisation()
{
RuleFor(Model=> Model)
.Must(Model=> IsUserAuthorised(UserName))
.WithName("Authorisation Check");
}
private void ValidateTitle_NotEmpty()
{
RuleFor(model=> model)
.Must(title=> !string.IsNullOrEmpty(title))
.WithName("Title");
}
private void ValidateGender_NotEmpty()
{
RuleFor(model=> model)
.Must(Gender=> !string.IsNullOrEmpty(Gender))
.WithName("Gender");
}.... And others
现在,我希望在授权验证失败时停止验证所有其他验证。我不想使用CascadeMode.StopOnFirstFailure,因为它总是检查第一次验证失败并停止验证其他验证失败。当授权验证失败时,有没有办法可以返回服务(从调用验证器的位置)。
答案 0 :(得分:7)
如果您将Validate_Authorisation
方法更改为以下内容:
private IRuleBuilderOptions<Model, string> Validate_Authorisation()
{
RuleFor(Model=> Model)
.Must(Model=> IsUserAuthorised(UserName))
.WithName("Authorisation Check");
}
然后,您可以使用dependentRules
扩展程序执行以下操作:
Validate_Authorisation().DependentRules(rules =>
{
ValidateTitle_NotEmpty();
ValidateGender_NotEmpty();
ValidateFirstName_Regex();
ValidateFirstName_NotEmpty();
ValidateSurname_NotEmpty();
ValidateSurname_Regex();
ValidateMobilePhone_Regex();
});