asp.net - 如何覆盖 fluentvalidator 扩展方法?
问题描述
我正在使用 .NET ASP.NET MVC 4。对于验证,我正在使用 Fluent 验证。我是新来的。如何覆盖DefaultValidatorExtensions类的方法?
我找到了一种解决方案。
创建继承IValidatorInterceptor和AbstractValidator的basevalidator类。但我不知道如何覆盖验证方法。
实际上我想更改任何验证方法的默认消息。该消息对于某些验证的所有属性都是通用的,因此我想覆盖这些验证方法而不是使用“WithMessage()”。
例如:
RuleFor(x => x.Name).NotEmpty();
将返回“‘名称’不应为空。” 但我想要消息“必需”。
解决方案
我在这个链接上找到了答案。我认为它可以帮助你: 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");
推荐阅读
- sql - 如何计算。使用现有的 Sql 查询很难计算表的计数(*)
- javascript - 重新初始化对象的反应状态数组会导致未定义的值
- java - 是否可以将 Java 代码从 Web 包含到 XSLT1.0 文件中?
- java - Spring Security PermissionEvaluator:如何使用对象 ID 实现 hasPermission 方法?
- python - 将信号绑定到 QListWidget 项
- sql - 当要测试过滤的值位于单独的条目中时,对 db 条目进行分组
- chart.js - ChartJs:点之间的不同颜色填充使线条笔直......需要曲线(lineTension)
- clearcase - 在分支上查找带有特定标签的元素
- sql - PostgreSQL 函数不适用于 WHERE 子句
- javascript - 谷歌表格 - 根据特定列将行移动到另一张表格