FluentValidation 一个 属性 的多个错误消息
FluentValidation Multiple error messages for one property
我正在使用 FluentValidation 验证输入值。我正在使用一种方法来验证数据库中的值,其中 return 的整数值 -1、-2 和 -3 用于基于值的不同错误消息。如何根据方法中的 return 值显示错误消息。我在 class 范围内创建了一个变量并设置了 return 值,在下一条语句中我尝试比较并尝试显示消息,但我观察到下一条语句在更新值之前执行。
我想为一个输入值显示不同的错误消息。
例如用户输入负值错误信息应该是"negative values are not allowed",
如果用户输入了一个大数值,那么消息应该是 "number is too long".
这里是代码 ISValidAction 是验证输入并设置变量 returnvalue 的方法,此方法始终 returns true。
int returnvalue = 0;
RuleFor(r => r.action).Must(ISValidAction).WithMessage("Action does not exist in the system.").When(r => !String.IsNullOrEmpty(r.action));
RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -2 && returnvalue != -3)).WithMessage("");//for -1
RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -1 && returnvalue != -3)).WithMessage("");//for -2
RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -1 && returnvalue != -2)).WithMessage("");// for -3
我得到了解决方案!针对一个值显示多个错误。
我刚刚在 PropertyValidatorContext
中添加了错误消息
RuleFor(r => r.action).Must(ActionRateLimit).When(r => !String.IsNullOrEmpty(r.action));
这是使用函数进行验证的调用。
方法在这里
private bool ActionRateLimit(LogActionInput obj, string actionName, PropertyValidatorContext context)
{
int result = 0;
IRecognitionStoreService StoreService = new RecognitionStoreService();
result = StoreService.ActionRateLimit(actionName, obj.userName);
if (result==1)
{
return true;
}
else if (result==0)
{
context.MessageFormatter.AppendArgument("ValidationMessage","Invalid action name or the user doesn't exists.");
}
else if(result==-1)
{
context.MessageFormatter.AppendArgument("ValidationMessage", "Action exceeds its rate limit. Please try again in a while.");
}
else if (result == -3)
{
context.MessageFormatter.AppendArgument("ValidationMessage", "This user has not completed the prequisite challenge. Action logging failed.");
}
return false;
}
}
它工作正常。
这里介绍了如何根据一个 属性 的值 return 显示不同的错误消息。
例如,我们有 State (string) 属性 和 :
RuleFor(x => x.State).Custom((st, context) =>
{
if (st == "0")
{
context.AddFailure("error message for (st == 0)");
}
if (st == "-1")
{
context.AddFailure("error message for (st == -1)");
}
});
我正在使用 FluentValidation 验证输入值。我正在使用一种方法来验证数据库中的值,其中 return 的整数值 -1、-2 和 -3 用于基于值的不同错误消息。如何根据方法中的 return 值显示错误消息。我在 class 范围内创建了一个变量并设置了 return 值,在下一条语句中我尝试比较并尝试显示消息,但我观察到下一条语句在更新值之前执行。
我想为一个输入值显示不同的错误消息。
例如用户输入负值错误信息应该是"negative values are not allowed", 如果用户输入了一个大数值,那么消息应该是 "number is too long".
这里是代码 ISValidAction 是验证输入并设置变量 returnvalue 的方法,此方法始终 returns true。
int returnvalue = 0;
RuleFor(r => r.action).Must(ISValidAction).WithMessage("Action does not exist in the system.").When(r => !String.IsNullOrEmpty(r.action));
RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -2 && returnvalue != -3)).WithMessage("");//for -1
RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -1 && returnvalue != -3)).WithMessage("");//for -2
RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -1 && returnvalue != -2)).WithMessage("");// for -3
我得到了解决方案!针对一个值显示多个错误。
我刚刚在 PropertyValidatorContext
RuleFor(r => r.action).Must(ActionRateLimit).When(r => !String.IsNullOrEmpty(r.action));
这是使用函数进行验证的调用。
方法在这里
private bool ActionRateLimit(LogActionInput obj, string actionName, PropertyValidatorContext context)
{
int result = 0;
IRecognitionStoreService StoreService = new RecognitionStoreService();
result = StoreService.ActionRateLimit(actionName, obj.userName);
if (result==1)
{
return true;
}
else if (result==0)
{
context.MessageFormatter.AppendArgument("ValidationMessage","Invalid action name or the user doesn't exists.");
}
else if(result==-1)
{
context.MessageFormatter.AppendArgument("ValidationMessage", "Action exceeds its rate limit. Please try again in a while.");
}
else if (result == -3)
{
context.MessageFormatter.AppendArgument("ValidationMessage", "This user has not completed the prequisite challenge. Action logging failed.");
}
return false;
}
}
它工作正常。
这里介绍了如何根据一个 属性 的值 return 显示不同的错误消息。 例如,我们有 State (string) 属性 和 :
RuleFor(x => x.State).Custom((st, context) =>
{
if (st == "0")
{
context.AddFailure("error message for (st == 0)");
}
if (st == "-1")
{
context.AddFailure("error message for (st == -1)");
}
});