Я делаю пользовательскую проверку поля ввода в ASP.NET Core MVC (2.1).Я хотел бы добавить простое поле Captcha с просьбой ввести несколько цифр, которые можно легко перенастроить в файле appsettings.json.Я знаю, что существует множество библиотек, выполняющих капчу, но это не то, что я хочу для этого конкретного случая.
У меня проблемы с получением значения из appsettings.json.Приведенный ниже код прекрасно компилируется, но я не знаю, как получить значение из файла appsettings.json в классе CaptchaCustomAttribute.
Вот мой код:
// appsettings.json
{
"GeneralConfiguration": {
"Captcha": "123456"
}
}
// GeneralConfiguration.cs
public class GeneralConfiguration
{
public string Captcha { get; set; }
}
// startup.cs / dependency injection
public void ConfigureServices(IServiceCollection services)
{
services.Configure<GeneralConfiguration>(Configuration.GetSection("GeneralConfiguration"));
}
// form model
public class ContactFormModel {
... simplified
[Display(Name = "Captcha")]
[Required(ErrorMessage = "Required")]
[CaptchaCustom]
public string Captcha { get; set; }
}
// CaptchaCustomAttribute.cs
public sealed class CaptchaCustomAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null) return new ValidationResult("value cannot be null");
if (value.GetType() != typeof(string)) throw new InvalidOperationException("can only be used on string properties.");
// get value of Captcha here. How?
// this will fail for obvious reasons
//var service = (GeneralConfiguration)validationContext
// .GetService(typeof(GeneralConfiguration));
//if ((string)value == service.Captcha)
//{
// return ValidationResult.Success;
//}
return new ValidationResult("unspecified error");
}
}