我正在使用.NET ASP.NET MVC4。为了进行验证,我正在使用Fluent验证。我是新来的。如何覆盖 DefaultValidatorExtensions 类的方法?
我找到了一个解决方案。
创建 basevalidator 类,该类继承了 IValidatorInterceptor 和 AbstractValidator 。但是我没有得到如何覆盖验证方法的方法。
实际上,我想更改任何验证方法的默认消息。对于某些验证,该消息对于所有属性都是通用的,因此我想覆盖这些验证方法,而不要使用'WithMessage()'。
例如:
RuleFor(x => x.Name).NotEmpty();
将返回“'名称'不能为空。”但我要消息“必填”。
答案 0 :(得分: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}'是必需的”);