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");
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With