Inside class that is responsible for validation I have simple rule:
RuleFor(u => u.Id)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("Id is required")
.Must(ValidateId);
and below is my ValidateId
function:
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;
}
If I run my validator I get default error, not my custom errors I'm specifying inside my function.
I've tried setting them using:
context.Rule.CurrentValidator.ErrorCodeSource = new StaticStringSource("Id is invalid");
but without any luck.
How can I define error message inside validation function?
You can use CustomValidator instead:
RuleFor(u => u.Id)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("Id is required")
.Custom(ValidateId);
And below - ValidateId
method:
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");
}
}