Я пытаюсь внедрить невидимый значок 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? Пожалуйста, помогите.