如何重写 fluidvalidator 扩展方法?

ros*_*001 0 asp.net asp.net-mvc overriding fluentvalidation asp.net-mvc-4

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

我找到了一个解决方案。

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

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

例如:

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

小智 5

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

\n\n

如果您想替换所有(或部分)FluentValidation\xe2\x80\x99s 默认消息,那么您可以通过实现 ILanguageManager 接口的自定义版本来完成此操作。

\n\n

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

\n\n
public class CustomLanguageManager : FluentValidation.Resources.LanguageManager {\n  public CustomLanguageManager() {\n    AddTranslation("en", "NotNullValidator", "\'{PropertyName}\' is required.");\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
ValidatorOptions.LanguageManager = new CustomLanguageManager();\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是一个简单的示例,仅替换一条仅英语的 validator\xe2\x80\x99s 消息,但可以扩展以替换所有语言的消息。如果您想从 FluentValidation 默认值之外的完全不同的位置加载消息(例如,如果您想存储 FluentValidation\xe2\x80\x99s 默认值),您也可以直接实现 ILanguageManager 接口,而不是继承默认的 LanguageManager数据库中的消息)。

\n\n

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

\n