“你调用的对象是空的。”使用BotDetect Captcha时

时间:2016-06-15 19:13:01

标签: asp.net .net vb.net visual-studio-2015 captcha

我之前使用过BotDetect来使用asp WEBFORM上的验证码,但现在当我尝试使用NuGet将BotDetect添加到另一个Asp BotDetect.Web.UI.WebFormsCaptcha.OnInit(EventArgs e)项目时,我遇到了一个'对象'在调试时,引用未设置为对象'错误的实例。

我无法加载页面,也无法进行任何中断。当它尝试执行我的表单页面的应用程序见解请求GET时似乎失败了。然后它会在System.Web.dll

中抛出一个无法处理的异常

然而,话虽如此,当我尝试运行调试器时,我仍然遇到了“对象引用未设置为对象实例”错误,但它引用了BotDetect

我删除了BotDetect包,重新添加了程序集,尝试从工作项目添加程序集,我试图从头开始重新创建项目,看看我是否有错误配置的东西。似乎没什么用。

我目前有来自NuGet包(版本4.0.1)的BotDetect.Web.MVC<package id="Captcha" version="4.0.1" targetFramework="net452" /> ,我已经检查过以确保我在我的.net 4.5项目中使用.net 4.5版本

我已经检查了我的Packages.config,我可以看到:

<asp:Content ID="Content4" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
<fieldset>
  <legend>ASP.NET WebForm CAPTCHA Validation</legend>
  <p class="prompt">
    <label for="CaptchaCodeTextBox">Retype the characters from the picture:</label></p>
  <BotDetect:WebFormsCaptcha runat="server" ID="ExampleCaptcha" 
  UserInputControlID="CaptchaCodeTextBox" />
  <div class="validationDiv">
    <asp:TextBox ID="CaptchaCodeTextBox" runat="server"></asp:TextBox>
    <asp:Button ID="ValidateCaptchaButton" runat="server" />
    <asp:Label ID="CaptchaCorrectLabel" runat="server" CssClass="correct"></asp:Label>
    <asp:Label ID="CaptchaIncorrectLabel" runat="server" CssClass="incorrect"></asp:Label>
  </div>
</fieldset>

以下是我引用BotDetect Captcha的代码。它是一个MasterPage网络表单,但是Captcha驻留在内容占位符中,因为我们在渲染主文件后与它进行交互。

我只是不确定我还能做些什么来解决这个问题,有什么建议吗?

ASP表单页

Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
    ' initial page setup
    If Not IsPostBack Then
        ' set control text
        ValidateCaptchaButton.Text = "Validate"
        CaptchaCorrectLabel.Text = "Correct!"
        CaptchaIncorrectLabel.Text = "Incorrect!"

        ' these messages are shown only after validation
        CaptchaCorrectLabel.Visible = False
        CaptchaIncorrectLabel.Visible = False
    End If

    If IsPostBack Then
        ' validate the Captcha to check we're not dealing with a bot
        Dim isHuman As Boolean
        isHuman = ExampleCaptcha.Validate()
        If isHuman Then
            CaptchaCorrectLabel.Visible = True
            CaptchaIncorrectLabel.Visible = False
        Else
            CaptchaCorrectLabel.Visible = False
            CaptchaIncorrectLabel.Visible = True
        End If
    End If
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim HF As HiddenField = DirectCast(Page.Master.FindControl("HF1"), HiddenField)

        If Not IsPostBack Then
            SetInitialRow()
        ElseIf HF.Value = "AddNewRow" Then
            AddNewRowToGrid()
        Else
            btnSubmit_Click()
        End If
Done:
    End Sub

ASP表格背后的代码

mkdir -p /Users/YourUsernameHere/Library/Python/2.7/lib/python/site-packages
echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/YourUsernameHere/Library/Python/2.7/lib/python/site-packages/homebrew.pth

1 个答案:

答案 0 :(得分:2)

所以我已经与BotDetect的开发者交谈了,事实证明这实际上是他们当前发布的一个错误。

您目前无法使用BotDetect(v4.0.1)在内容页面(带有母版页的Web表单)中设置UserInputControlID属性。在下一个版本中会有一个补丁。

与此同时,根据我发布的代码,您可以在代码隐藏(VB)中以编程方式设置它。

  

CODE BEHIND(在page_prerender中)

ExampleCaptcha.UserInputID = CaptchaCodeTextBox.ClientID

您可能还需要替换

isHuman = ExampleCaptcha.Validate()

isHuman = ExampleCaptcha.Validate(CaptchaCodeTextBox.Text.Trim())
  

内容网页

<BotDetect:WebFormsCaptcha runat="server" ID="ExampleCaptcha" />