Почему я получаю нулевой ответ Google ReCaptcha за невидимый значок? - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь внедрить невидимый значок Google ReCaptcha в мой существующий проект, но у меня возникла проблема на стороне сервера при получении значения ответа Google ReCaptcha, я всегда получаю значение NULL. Что я пропустил или что я делаю здесь неправильно?

Я пытался получить значение ответа, используя Request ["g-recaptcha-response"], но не смог получить значение.

Код установки на стороне клиента, как показано ниже:

  <script src="https://www.google.com/recaptcha/api.js" async defer></script>
   <section id="ncp-rhs-form-container">
    @using (Ajax.BeginForm("NPCRHS", "WidgetContent", new AjaxOptions { OnSuccess = "OnNPCRHS", LoadingElementId = "ajaxloader"}, new {id = "NPCRHSForm", @class = ""}))
    {
        <fieldset class="req error-block">
            @Html.HiddenFor(x => x.Id)
            @Html.HiddenFor(x => x.IsShowManagePreferenceLink)
            @Html.HiddenFor(x => x.NewsLetterPrefenceId)
            @Html.TextBoxFor(x => x.Email, new {Id = "rhs-email", placeholder = @T("Admin.ContentManagement.NewslettterType.Module.Email.Placeholder")})
            @Html.ValidationMessageFor(x => x.Email)

        </fieldset>
        <p style="font-size: 11px;">@T("Newsletters.Privacy Policy")</p>
        <p id="ncp-rhs-success-message" style="font-weight: bold;"></p>
        <div class="black-btn">
            <input type="submit" value="Sign me up!" id="npc-rhs-submit" name="npc-rhs-submit" class="btn g-recaptcha" data-sitekey="6Ldoxxxxxxxxx"  data-callback='resetrhsrecaptcha' >
        </div>

        <div class="manage-link">
            <a class="manage-prefence-email-link">@T("Admin.ContentManagement.NewslettterType.Module.Managepreferences") </a>
        </div>
    }
    function resetrhsrecaptcha() {
    $("#NPCRHSForm").submit();
    grecaptcha.reset();
}

Код на стороне сервера, как показано ниже:

    [HttpPost]
    public JsonResult NPCRHS(NewsletterTypeModuleModel model)
    {
        bool success = false;
        string message = string.Empty;

        string response = Request["g-recaptcha-response"];///Here i am getting value Null

        bool recaptchaValid = ValidatereCaptcha(response);

        return recaptchaValid;
    }
    private bool ValidatereCaptcha(string response)
    {
        var CaptchaSecretKey = "My key"; 

        var client = new System.Net.WebClient();
        var reply = client.DownloadString(string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", CaptchaSecretKey, response));

        var reCaptchaResponseModel = JsonConvert.DeserializeObject<ReCaptchaResponseModel>(reply);

        return reCaptchaResponseModel.Success;
    }
    public class ReCaptchaResponseModel
    {
      /// <summary>
      /// </summary>
      [JsonProperty("success")]
      public bool Success { get; set; }

      /// <summary>
      /// </summary>
      [JsonProperty("error-codes")]
      public List<string> ErrorCodes { get; set; }
    }

Я не получаю никакой ошибки, но все еще не знаю, что здесь не так, почему я не могу получить значение ответа reCaptcha? Пожалуйста, помогите.

...