FluentValidation 修改 Must 函数中的错误消息

Mis*_*siu 6 c# fluentvalidation asp.net-web-api2

在负责验证的类内部我有简单的规则:

RuleFor(u => u.Id)
    .Cascade(CascadeMode.StopOnFirstFailure)
    .NotEmpty().WithMessage("Id is required")
    .Must(ValidateId);
Run Code Online (Sandbox Code Playgroud)

下面是我的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;
}
Run Code Online (Sandbox Code Playgroud)

如果我运行我的验证器,我会得到默认错误,而不是我在函数中指定的自定义错误。
我尝试使用以下方法设置它们:

context.Rule.CurrentValidator.ErrorCodeSource = new StaticStringSource("Id is invalid");
Run Code Online (Sandbox Code Playgroud)

但没有任何运气。

如何在验证函数中定义错误消息?

tar*_*arn 7

您可以改用 CustomValidator:

RuleFor(u => u.Id)
    .Cascade(CascadeMode.StopOnFirstFailure)
    .NotEmpty().WithMessage("Id is required")
    .Custom(ValidateId);
Run Code Online (Sandbox Code Playgroud)

和下面 -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");
    }
}
Run Code Online (Sandbox Code Playgroud)