我正在尝试在我的应用程序中对页面的部分视图实现Captcha。我通过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
}%>
答案 0 :(得分:13)
使用NuGet并安装Recaptcha for .NET(也支持MVC)
http://nuget.org/packages/RecaptchaNet/
网站上有文档:
http://recaptchanet.codeplex.com/
还有其他验证码:
http://captchamvc.codeplex.com/
修改强>:
这个项目已移至GitHub https://github.com/tanveery/recaptcha-net
答案 1 :(得分:9)
NuGet Google reCAPTCHA V2 适用于MVC 4和5
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);
}
编辑:
您还应该在头标记中添加此内容,否则您可能会看到不正确的验证码
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
答案 2 :(得分: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
中实现它。但这应该适用于大多数用途。
答案 3 :(得分:1)
我建议您使用Google reCAPTCHA,这是最好的,易于实施,另外还有Google的信任。
非常有效且易于实施。
阅读我在implementing Google reCAPTCHA in ASP.NET MVC
上撰写的这篇文章由于