Не удается интегрировать reCAPTCHA v2 (на стороне сервера) в ASP.NET - PullRequest
0 голосов
/ 07 мая 2018

Мы использовали reCAPTCHA в нашем проекте ASP.NET и без проблем отправили капчу из ascx в код за страницей (на стороне сервера). Однако после марта 2018 года нам пришлось обновить капчу до v2 и внести следующие изменения:

Контроль пользователя (cs):

....
protected Recaptcha.Web.UI.Controls.Recaptcha Captcha;
protected override Recaptcha.Web.UI.Controls.Recaptcha ReCaptcha 
    { get { return this.Captcha; } }

protected void btnSend_Click(object sender, EventArgs e)
{
    if (this.Submit(sender))
        this.mvMain.ActiveViewIndex++;
}

1010 *
*

reCAPTCHA v1 (ascx): В этой версии ключ сайта определен в web.config.

<%@ Control Language="C#" AutoEventWireup="true" Inherits="Tools.WebUI._ContactForm"%>

<%@ Register Assembly="Recaptcha.Web" Namespace="Recaptcha.Web.UI.Controls" TagPrefix="cc1"%>

<asp:MultiView ID="mvMain" ActiveViewIndex="0" runat="server">
    <asp:View runat="server">
        <div id="divCaptcha">

            <!-- code omitted for brevity -->

            <div id="captcha">
                <cc1:Recaptcha ID="Captcha" Theme="Clean" runat="server" />

            </div>
            <asp:TextBox ID="txtBotCheck" style="display:none !important" runat="server" />
            <asp:Button ID="btnSend" runat="server" OnClick="btnSend_Click" />
            <asp:Label ID="lblMessage" runat="server" CssClass="captchaMessage"></asp:Label>
        </div>
    </asp:View>
    <asp:View runat="server">
        Message was sent...
    </asp:View>
</asp:MultiView>


reCAPTCHA v2 (ascx):

<%@ Control Language="C#" AutoEventWireup="true" Inherits="Crema.Tools.WebUI._ContactForm"%>

<%@ Register Assembly="Recaptcha.Web" Namespace="Recaptcha.Web.UI.Controls" TagPrefix="cc1"%>

<asp:MultiView ID="mvMain" ActiveViewIndex="0" runat="server">
    <asp:View runat="server">

    <script src="http://www.google.com/recaptcha/api.js" async defer></script> 

        <div id="divCaptcha">

            <!-- code omitted for brevity -->

            <div id="captcha">
                <div class="g-recaptcha" data-sitekey="tlcUAAACV...............FhQ"></div>     
            </div>

            <asp:TextBox ID="txtBotCheck" style="display:none !important" runat="server" />
            <asp:Button ID="btnSend" runat="server" OnClick="btnSend_Click" />
            <asp:Label ID="lblMessage" runat="server" CssClass="captchaMessage"></asp:Label>
        </div>
    </asp:View>
    <asp:View runat="server">
        Message was sent...
    </asp:View>
</asp:MultiView>

При отправке этой формы мы столкнулись с ошибкой pge, и в соответствующих журналах произошла следующая ошибка. С другой стороны, когда мы смотрим на сеть Firebug, мы наблюдаем g-recaptcha-response , но не наблюдаем параметр captcha, даже если мы используем свойство "name" с name = "captcha".

Информация об исключении:

Тип исключения: NullReferenceException Сообщение об исключении: ссылка на объект не установлена ​​для экземпляра объекта. at Tools.Domain.FormUserControl.Submit (Отправитель объекта) в Tools.WebUI._ContactForm.btnSend_Click (Отправитель объекта, EventArgs e) в System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) в System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint)

Есть идеи?

1 Ответ

0 голосов
/ 25 мая 2018

Я следовал этому замечательному руководству по реализации reCaptcha v2 в ASP.NET WebForms:

https://www.aspsnippets.com/Articles/Google-RECaptcha-Code-with-Example-in-ASPNet.aspx

P.S .: У этого парня много отличных советов и статей, которые я проверяю время от времени.

...