【问题标题】:How to set options in FluentValidation?如何在 FluentValidation 中设置选项?
【发布时间】:2020-09-23 01:15:22
【问题描述】:

我在ASP.NET Core 3.1 Web API 中使用FluentValidation。当出现验证错误时,FluentValidation 返回带有字段名称的错误列表(或{PropertyName})。问题是它正在对它们进行规范化:例如,UserId 更改为“User Id”。我想在错误中保留原始属性名称。

我发现了类似的问题here。解决方案是:“您可以通过将 ValidatorOptions.DisplayNameResolver 设置为应用程序启动例程中的自定义函数来全局关闭它。”。我也在他们的官方网站上找到了这个:

ValidatorOptions.DisplayNameResolver = (type, member, expression) => {
  if(member != null) {
     return member.Name + "Foo";
  }
  return null;
};

但我的(新手)问题是:如何将这些选项添加到我的项目中?这是我的Startup 课程(opt 没有DisplayNameResolver):

        services.AddControllers()
            .AddFluentValidation(opt =>
            {
                opt.RegisterValidatorsFromAssemblyContaining(typeof(PlayerInputValidator));
            });

【问题讨论】:

  • ValidatorOptions.DisplayNameResolver 是一个静态成员,所以你可以使用你发布的代码在ConfigureServices 中配置它,只需将它放在services 配置之外。
  • @stuartd 哦.. 顺序重要吗?我应该先AddFluentValidation 吗?
  • 我认为这不重要。 AddFluentValidation 扩展将向 DI 容器添加 FV 服务等。验证选项是静态的,随时可用

标签: c# asp.net-core .net-core asp.net-core-webapi fluentvalidation


【解决方案1】:

您应该可以在您的启动文件中进行全局设置:

FluentValidation.ValidatorOptions.Global.DisplayNameResolver = (type, member, expression) => member?.Name;

另一种选择是在规则上使用.WithName 来指定该案例的值。

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多