FluentValidation修改必须函数中的错误消息
本文关键字:错误 消息 函数 修改 FluentValidation | 更新日期: 2023-09-27 17:57:32
在负责验证的类内部,我有一个简单的规则:
RuleFor(u => u.Id)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("Id is required")
.Must(ValidateId);
下面是我的ValidateId
函数:
private bool ValidateId(CreateAccountBindingModel model, string id, PropertyValidatorContext context)
{
if (id=="test")
{
context.Rule.CurrentValidator.ErrorCodeSource = new StaticStringSource("You are testing");
return false;
}
var idValid = IdValidator.IsValid(id);
if (!idValid)
{
context.Rule.CurrentValidator.ErrorCodeSource = new StaticStringSource("Id is invalid");
return false;
}
return true;
}
如果我运行验证器,我会得到默认错误,而不是我在函数中指定的自定义错误
我试着用设置它们
context.Rule.CurrentValidator.ErrorCodeSource = new StaticStringSource("Id is invalid");
但是没有任何运气。
如何在验证函数中定义错误消息?
您可以改用CustomValidator:
RuleFor(u => u.Id)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("Id is required")
.Custom(ValidateId);
及以下-ValidateId
方法:
private void ValidateId(string id, CustomContext context)
{
if (id == "test")
{
context.AddFailure("You are testing");
}
var idValid = IdValidator.IsValid(id);
if (!idValid)
{
context.AddFailure("Id is invalid");
}
}
我不会用自定义验证函数来实现您想要做的事情,因为您可以使用FluentValidation
本身来实现:
RuleFor(u => u.Id)
.Cascade(CascadeMode.StopOnFirstFailure)
.Must(x => x !="test").WithMessage("You are testing.")
.Must(x => IdValidator.IsValid(x)).WithMessage("Id is invalid.");