FluentValidation: как разместить все сообщения проверки в одном месте?

Это один из моих классов проверки:

public class StocksValidator : AbstractValidator<Stocks>
    {
        public StocksValidator()
        {
            RuleFor(x => x.SellerId).GreaterThan(1).WithMessage("SellerId should be greater than 1")
                                    .LessThan(100).WithMessage("SellerId should be less than 100");
            RuleFor(x => x.SellerType).GreaterThan(101).WithMessage("SellerType should be greater than 101")
                                    .LessThan(200).WithMessage("SellerType should be less than 200");
            RuleFor(x => x.SourceId).GreaterThan(201).WithMessage("SourceId should be greater than 201")
                                    .LessThan(300).WithMessage("SourceId should be less than 300");
        }
    }

Я понимаю, что эти сообщения, такие как {field}, должны быть меньше, чем {x}, в общем месте, а не здесь. Но я понятия не имею, как их централизовать?

  1. Одним из способов может быть создание нового файла C# со всеми этими константными строками. Это довольно просто.

  2. Использование локализации в веб-API с быстрой проверкой. Каковы преимущества этого. Где найти хороший урок?

1 ответ

Если вам нужно изменить сообщения по умолчанию для встроенных правил, это повлияет на все валидаторы, которые содержат это правило (и) - выполните следующие шаги:

1: настроить плавную проверку с помощью своего пользовательского класса поставщика ресурсов по адресу Startup.cs или же global.asax.cs

ValidatorOptions.ResourceProviderType = typeof(MyResourceProvider);

2: переопределить сообщения по умолчанию для некоторых правил проверки

// create MyResourceProvider.resx to auto-generate this class in MyResourceProvider.Designer.cs file (support multiple cultures out of box),
// or create class manually and specify messages in code
public class MyResourceProvider {
   public static string greaterthan_error {
      get { 
          return "{PropertyName} should be greater than {ComparisonValue}, but you entered {PropertyValue}";
      }
   }
   public static string lessthan_error {
      get { 
          return "{PropertyName} should be less than {ComparisonValue}";
      }
   }
}

3 (необязательно): использовать WithName() способ заменить вывод по умолчанию имени свойства на более удобный для пользователя

RuleFor(x => x.SellerId).GreaterThan(1).WithName("Seller identidier") 
// outputs "Seller identidier should be greater than 1, but you entered 0"

Более подробную информацию вы можете найти на https://github.com/JeremySkinner/FluentValidation/:

1. Локализация - здесь вы можете найти больше информации о способах локализации сообщений (например, WithLocalizedMessage метод), а также имена ресурсов, которые должны использоваться в качестве имен свойств в MyResourceProvider,

2. Встроенные валидаторы - здесь вы можете найти имена подстановок для всех правил валидации, которые должны использоваться в строках сообщений об ошибках.

3. Messages.resx - файл ресурсов по умолчанию с сообщениями об ошибках, размещенными здесь.

Другие вопросы по тегам