Google Captcha не отображается в ASP .NET Core 2.1 - PullRequest
0 голосов
/ 06 сентября 2018

В настоящее время я выполняю миграцию веб-сайта с 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 значение не присвоено моей модели?

...