无法在 ASP.NET 中集成 reCAPTCHA v2(服务器端)
Cannot Integrate reCAPTCHA v2 (server side) in ASP.NET
我们在 ASP.NET 项目中使用了 reCAPTCHA,并将验证码从 ascx 发送到代码隐藏页面(服务器端),没有任何问题。然而,在2018年3月之后,我们不得不将验证码更新到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++;
}
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,但即使我们使用 "name" 属性 名称="captcha"。
异常信息:
Exception type: NullReferenceException
Exception message: Object reference not set to an instance of an object.
at Tools.Domain.FormUserControl.Submit(Object sender)
at Tools.WebUI._ContactForm.btnSend_Click(Object sender, EventArgs e)
at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
有什么想法吗?
我按照这个很棒的教程在 ASP.NET WebForms 中实现了 reCaptcha v2:
https://www.aspsnippets.com/Articles/Google-RECaptcha-Code-with-Example-in-ASPNet.aspx
P.S.: 这家伙有很多很棒的技巧和文章,我会不时查看。
我们在 ASP.NET 项目中使用了 reCAPTCHA,并将验证码从 ascx 发送到代码隐藏页面(服务器端),没有任何问题。然而,在2018年3月之后,我们不得不将验证码更新到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++;
}
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,但即使我们使用 "name" 属性 名称="captcha"。
异常信息:
Exception type: NullReferenceException Exception message: Object reference not set to an instance of an object. at Tools.Domain.FormUserControl.Submit(Object sender) at Tools.WebUI._ContactForm.btnSend_Click(Object sender, EventArgs e) at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
有什么想法吗?
我按照这个很棒的教程在 ASP.NET WebForms 中实现了 reCaptcha v2:
https://www.aspsnippets.com/Articles/Google-RECaptcha-Code-with-Example-in-ASPNet.aspx
P.S.: 这家伙有很多很棒的技巧和文章,我会不时查看。