【问题标题】:How do I override fluentvalidator extension methods?如何覆盖 fluentvalidator 扩展方法?
【发布时间】:2019-05-11 11:30:03
【问题描述】:

我正在使用 .NET ASP.NET MVC 4。对于验证,我正在使用 Fluent 验证。我是新来的。如何覆盖 DefaultValidatorExtensions 类的方法?

我找到了一个解决方案。

创建继承 IValidatorInterceptorAbstractValidatorbasevalidator 类。但我不知道如何覆盖验证方法。

其实我想更改任何验证方法的默认消息。该消息对于某些验证的所有属性都是通用的,因此我想覆盖这些验证方法而不是使用“WithMessage()”。

例如:

RuleFor(x => x.Name).NotEmpty(); 将返回“‘名称’不应为空。”但我想要消息“必填”。

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 overriding fluentvalidation


    【解决方案1】:

    我在此链接上找到了答案。我认为它可以帮助你: https://fluentvalidation.net/localization#default-messages

    如果您想替换所有(或部分)FluentValidation 的默认消息,那么您可以通过实现自定义版本的 ILanguageManager 接口来做到这一点。

    例如,NotNull 验证器的默认消息是“{PropertyName}”,不得为空。如果您想为应用程序中所有 NotNull 验证器的使用替换此消息,您可以编写自定义语言管理器:

    public class CustomLanguageManager : FluentValidation.Resources.LanguageManager {
      public CustomLanguageManager() {
        AddTranslation("en", "NotNullValidator", "'{PropertyName}' is required.");
      }
    }
    

    这里我们有一个继承自基础 LanguageManager 的自定义类。在其构造函数中,我们调用 AddTranslation 方法,传入我们正在使用的语言、我们想要覆盖的验证器的名称以及新消息。

    完成此操作后,我们可以通过在应用程序启动例程期间设置静态 ValidatorOptions 类中的 LanaguageManager 属性来替换默认 LanguageManager:

    ValidatorOptions.LanguageManager = new CustomLanguageManager();
    

    这是一个简单的示例,它仅替换了一个验证者的英语消息,但可以扩展为替换所有语言的消息。如果您想从 FluentValidation 默认以外的完全不同的位置加载消息(例如,如果您想将 FluentValidation 的默认消息存储在数据库中),您也可以直接实现 ILanguageManager 接口,而不是从默认 LanguageManager 继承。

    当然,如果您只想用验证器替换此消息,那么您可以使用 WithMessage("'{PropertyName}' is required");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      相关资源
      最近更新 更多