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}, в общем месте, а не здесь. Но я понятия не имею, как их централизовать?
Одним из способов может быть создание нового файла C# со всеми этими константными строками. Это довольно просто.
Использование локализации в веб-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 - файл ресурсов по умолчанию с сообщениями об ошибках, размещенными здесь.