FluentValidation 修改 Must 函数中的错误信息
FluentValidation modify error message in Must function
在负责验证的 class 里面我有一个简单的规则:
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");
但运气不好。
如何在验证函数中定义错误消息?
我不会实现您尝试使用自定义验证函数执行的操作,因为您可以使用 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.");
您可以改用 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");
}
}
在负责验证的 class 里面我有一个简单的规则:
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");
但运气不好。
如何在验证函数中定义错误消息?
我不会实现您尝试使用自定义验证函数执行的操作,因为您可以使用 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.");
您可以改用 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");
}
}