负责验证的内部类我有简单的规则:
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");
但没有任何运气。
如何在验证函数中定义错误消息?
答案 0 :(得分:2)
您可以使用MessageBuilder
定义错误消息:
if (id == "test")
{
context.Rule.MessageBuilder = c => "You are testing";
return false;
}
答案 1 :(得分:2)
您可以改为使用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");
}
}
答案 2 :(得分:1)
我不会实现您尝试使用自定义验证功能,因为您可以使用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.");