Как установить параметры в FluentValidation?

#c# #asp.net-core #.net-core #asp.net-core-webapi #fluentvalidation

#c# #asp.net-ядро #.net-ядро #asp.net-core-webapi #fluentvalidation

Вопрос:

Я использую FluentValidation in ASP.NET Core 3.1 Web API . При возникновении ошибки проверки FluentValidation возвращает список ошибок с именами полей (или {PropertyName} ). Проблема в том, что они нормализуются: например, идентификатор пользователя изменяется на «Идентификатор пользователя». Я хочу сохранить исходное имя свойства в ошибке.

Я нашел похожую проблему здесь. Решение таково: «вы можете отключить его глобально, установив 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));
            });
  

Комментарии:

1. ValidatorOptions.DisplayNameResolver это статический элемент, поэтому вы можете настроить его, ConfigureServices используя опубликованный вами код, просто поместите его вне services конфигурации.

2. @stuartd о .. важен ли порядок? Должен ли я AddFluentValidation сначала?

3. Я не думаю, что это имеет значение. Расширение adfluentvalidation будет заключаться в добавлении служб FV и т. Д. В контейнер DI. Параметры проверки являются статическими и будут доступны в любой момент

Ответ №1:

Вы должны иметь возможность установить это глобально в своем файле запуска:

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

Другой вариант — использовать .WithName в правиле, чтобы указать значение для этого случая.