2012-03-16 64 views
8

任何人都可以解释如何在我的MVC3应用程序中具有像stackoverflow reCaptcha功能。如何在MVC3应用程序中实现Google reCaptcha?

如何定制?

+0

的Recaptcha? http://www.google.com/recaptcha – LukeH 2012-03-16 16:01:35

+0

我会推荐使用蜜罐ReCaptcha。您的用户的体验更好。这里有一个ASP.NET MVC http://nuget.org/packages/SimpleHoneypot.MVC – Paul 2012-03-16 16:09:11

+0

@Paul,你是否有如何实现蜜罐的例子? – updev 2012-03-16 18:37:45

回答

30

我使用Google ReCaptcha,它工作得很好,实施起来非常简单。

请注意,如果您使用的是HTTPS确保您有该DLL的当前版本(1.0.5.0在这个时候)

您需要创建在谷歌的Recaptcha网站的帐户,并得到一组的公钥和私钥。键添加到您的Web项目主要web.config文件:

<appSettings> 
    <add key="webpages:Version" value="1.0.0.0"/> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
    <add key="ReCaptchaPrivateKey" value="put your private key value here" /> 
    <add key="ReCaptchaPublicKey" value="put your public key value here" /> 
</appSettings> 

现在使用的NuGet和安装的reCAPTCHA插件.NET

然后,转到您的web.config文件你的意见文件夹内。加入这一行:

<namespaces> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" /> 
    <add namespace="Recaptcha"/> 
</namespaces> 

然后,在你认为你要显示的验证码,在你的文件的顶部添加using语句

@using Recaptcha; 

然后添加到您的观点:

<div class="editor-label"> 
    Are you a human? 
</div> 
<div class="editor-field"> 
    @Html.Raw(Html.GenerateCaptcha("captcha", "clean")) 
    @Html.ValidationMessage("captcha") 
</div> 

在你的控制器动作,你将需要修改签名就可以接受验证码结果:

[HttpPost] 
[RecaptchaControlMvc.CaptchaValidator] 
public ActionResult ForgotPassword(CheckUsernameViewModel model, bool captchaValid, string captchaErrorMessage) { 
    if (!Membership.EnablePasswordReset) 
     throw new Exception("Password reset is not allowed\r\n"); 
    if(ModelState.IsValid) { 
     if(captchaValid) { 
      return RedirectToAction("AnswerSecurityQuestion", new { username = model.Username }); 
     } 
     ModelState.AddModelError("", captchaErrorMessage); 
    } 
    return View(model); 
} 

以下这些步骤使我可以在多个页面上实施验证码并且工作顺利。请注意,在控制器操作的参数名称必须正确命名为:

bool captchaValid, string captchaErrorMessage 

如果你改变了这些参数的名字,你会在运行时得到一个错误,当您的形式回发到控制器动作。

+0

什么是公钥/私钥值?我应该放什么? – updev 2012-03-16 16:10:12

+0

@updev - 你可以在Google的ReCaptcha页面上注册他们:http://www.google.com/recaptcha/ – 2013-01-03 18:24:21

+0

@ cd-smith:当遵循您的指导原则将Recaptcha添加到MVC4时,我遇到了一个奇怪的行为项目;当我提交表单时,控制器动作会被调用两次,首先使用正确的Recaptcha结果,然后再次发生错误结果!你有类似的东西吗? – ThomasWeiss 2013-02-04 11:18:10

相关问题