В настоящее время я выполняю миграцию веб-сайта с ASP.NET MVC на ASP.NET Core 2.1 MVC.
Все сделано хорошо, кроме одного: для отправки сообщения в форме contact us
требуется Google Captcha.
Форма капчи просто не отображается, и я получаю сообщение об ошибке
Отсутствуют обязательные параметры: sitekey
Кто-нибудь может мне помочь? Я сделал что-то неправильно? Или есть какой-то шаг, который я пропустил?
Вот мой взгляд, который содержит ожидаемую капчу
<div class="row">
<div class="recaptcha">
<div class="g-recaptcha" data-sitekey="@Model.Captcha"></div>
<p class="field-validation-error">
@ViewData["CaptchaError"]
</p>
</div>
<div class="submit">
@Html.AntiForgeryToken()
<button type="submit" class="btn">Submit</button>
</div>
</div>
логика моего бэк-энда
public ContactModel(AppSettings appSettings, ContactService contactService)
{
this.appSettings = appSettings;
this.contactService = contactService;
}
public string Name { set; get; }
public string Subject { set; get; }
public string Message { set; get; }
public string Captcha { set; get; }
public void OnGet()
{
Captcha = appSettings.CaptchaPublicKey;
}
[ValidateAntiForgeryToken]
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
var captchaSuccess = await contactService.ValidateCaptcha(Request.Form["g-recaptcha-response"]);
if (!captchaSuccess)
{
ViewData["CaptchaError"] = "Failed to verify reCAPTCHA response!";
return Page();
}
await contactService.SendMail(Name, Subject, Message);
TempData["ContactSuccess"] = "Your message has been submitted, thank you! Our customer service will respond to you shortly.";
return Page();
}
Мой appsetting.json
:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ContactInbox": "xxxx",
"CaptchaPublicKey": "xxxx",
"CaptchaSecretKey": "xx",
"SendGridApiKey": "xxx",
"LoungeInviteUrl": "xxx"
}
и вот как я устанавливаю значение appsetting для моей модели
services.Configure<AppSettings>(this.Configuration);
services.AddTransient(di => di.GetService<IOptions<AppSettings>>().Value);
services.AddTransient<ContactService>();
services.AddSingleton(di =>
{
var client = new HttpClient();
// http://byterot.blogspot.co.id/2016/07/singleton-httpclient-dns.html
client.DefaultRequestHeaders.ConnectionClose = true;
return client;
});
и, наконец, вот моя модель, которая содержит значение appsetting.json
public class AppSettings
{
public string ContactInbox { set; get; }
public string CaptchaPublicKey { set; get; }
public string CaptchaSecretKey { set; get; }
public string SendGridApiKey { set; get; }
public string LoungeInviteUrl { set; get; }
}
Так вот, что я сделал, чтобы использовать Google CAPTCHA. Я делаю что-то неправильно? Или пропустить шаг? Пожалуйста, помогите мне
Большое спасибо, ребята
EDIT:
Я попытался жестко закодировать мой ключ сайта в мой HTML, и он работает
так что реальная проблема в том, почему мое appsetting.json
значение не присвоено моей модели?