6

我正在尝试在我的应用程序中页面的部分视图上实现验证码。我通过 web.config 将验证码作为控件进行引用。我使用了这个论坛帖子中的 GenericHandler 和 Class 文件:http ://forums.asp.net/t/1871186.aspx/1

如果我使用简单的输入标签,如何引用用户的输入?我应该改用 HtmlHelper 吗?

           <div class="captcha">
                <rhcap:Captcha ID="Captcha1" runat="server"></rhcap:Captcha>
                <input type="text" id="UserCaptchaText"><input/>
                <%= Html.TextAreaFor(m => m.UserCaptcha) %>
            </div>

            <%if(Captcha1.Text != /* How can get the users input here?*/ ) {
                  //display error

            }else{
                   //proceed
            }%>
4

4 回答 4

15

使用 NuGet 并为 .NET 安装 Recaptcha(也支持 MVC)

http://nuget.org/packages/RecaptchaNet/

文档在网站上:

http://recaptchanet.codeplex.com/

还有其他验证码:

http://captchamvc.codeplex.com/

编辑

该项目已移至 GitHub https://github.com/tanveery/recaptcha-net

于 2013-05-13T15:27:48.053 回答
10

适用于 MVC 4 和 5 的NuGet Google reCAPTCHA V2

Web.config文件在 web.config 文件的 appSettings 部分中,添加如下键:

<appSettings>
   <add name="reCaptchaPublicKey" value="Your site key" />
   <add name="reCaptchaPrivateKey" value="Your secret key" />
</appSettings>

在您的视图中添加 Recaptcha。

@using reCAPTCHA.MVC
@using (Html.BeginForm())
{
    @Html.Recaptcha()
    @Html.ValidationMessage("ReCaptcha")
    <input type="submit" value="Register" />
}

验证用户的响应。

[HttpPost]
[CaptchaValidator]
public ActionResult Index(RegisterModel registerModel, bool captchaValid)
{
    if (ModelState.IsValid)
    {
    }
    return View(registerModel);
}

编辑:

您还应该将其添加到您的 head 标签中,否则您可能会看到不正确的验证码

<script src="https://www.google.com/recaptcha/api.js" async defer></script>
于 2015-10-13T07:10:31.320 回答
2

首先,看起来您正在混合标准 ASP.NET 和 ASP.NET MVC。如果你想做 MVC,标准的方法是Html.TextBoxFor()东西的类型,然后你在控制器操作方法中处理它的值,而不是在页面中内联写一些东西。所以你有这样的事情:

Page.aspx
<rhcap:Captcha ID="Captcha1" runat="server"></rhcap:Captcha>
<%= Html.TextBoxFor(m => m.UserCaptcha) %>

然后在:

SomeController.cs

[HttpGet]
public ActionResult Page()
{
    // generate captcha code here
    ControllerContext.HttpContext.Session["Captcha"] = captchaValue;
    return View(new PageViewModel());
}

[HttpPost]
public ActionResult Page(PageViewModel model)
{
    if (model.UserCaptcha == ControllerContext.HttpContext.Session["Captcha"])
    {
        // do valid captcha stuff
    }
}

将其提升到一个新的水平将是在一个FilterAttribute. 但这应该适用于大多数用途。

于 2013-05-13T14:35:29.557 回答
1

我建议您使用 Google reCAPTCHA,它是最好的且易于实施的,而且它得到了 Google 的信任。

非常非常有效且易于实施。

阅读我写的这篇关于在 ASP.NET MVC 中实现 Google reCAPTCHA 的文章

谢谢

于 2016-06-16T07:50:09.007 回答