【问题标题】:How can I put the reCAPTCHA ASP.NET plugin in a Razor (CSHTML) file?如何将 reCAPTCHA ASP.NET 插件放入 Razor (CSHTML) 文件中?
【发布时间】:2013-02-05 22:25:01
【问题描述】:

首先让我说我正在使用 WebMatrix。我正在尝试将 reCAPTCHA 插件添加到我的 ASP.NET 网站。我查看了他们的 ASP.NET 插件的 quickstart 文档。以下是他们示例的一部分:

<%@ Page Language="VB" %>
<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>
<script runat="server">
    Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
        If Page.IsValid Then
            lblResult.Text = "You Got It!"
            lblResult.ForeColor = Drawing.Color.Green
        Else
            lblResult.Text = "Incorrect"
            lblResult.ForeColor = Drawing.Color.Red
        End If
    End Sub
</script>
<html>
  <body>
    <form runat="server">
      <asp:Label Visible=false ID="lblResult" runat="server" />
      <recaptcha:RecaptchaControl
          ID="recaptcha"
          runat="server"
          Theme="red"
          PublicKey="your_public_key"
          PrivateKey="your_private_key"
        />

      <!-- ... -->
    </form>
  </body>
</html>

我知道我不需要“”,但我对 Razor 还是很陌生,那么如何添加对 reCAPTCHA 程序集的引用并显示我页面中的插件?我怀疑我是否可以将此行用作程序集参考:

<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>

另外,我可以将&lt;asp:???&gt; 标签和来自 reCAPTCHA 程序集的标签放在我的 CSHTML 文档中吗?这在 WebMatrix 网站中是否有效:

<recaptcha:RecaptchaControl
    ID="recaptcha"
    runat="server"
    Theme="red"
    PublicKey="your_public_key"
    PrivateKey="your_private_key"
  />

基本上我问的是如何将 reCAPTCHA 插件添加到 Razor C# 文件。

【问题讨论】:

  • 或...为 MVC 设计的插件(可能比实际的网络表单更容易找到)
  • 对于 MVC,您可以这样做:mvcrecaptcha.codeplex.com 但是您正在使用带有 Razor 的网页,对吗?
  • @ScottSelby Brian 是正确的,我没有使用 MVC,我使用的是网页。

标签: asp.net razor webmatrix recaptcha webmatrix-2


【解决方案1】:

Microsoft.Web.Helpers 库中包含一个控件。基本用法是@Microsoft.Web.Helpers.ReCaptcha.GetHtml(publicKey: "...")

客户端(剃须刀)

@using (Html.BeginForm("Captcha", "Home", FormMethod.Post))
{
    @Microsoft.Web.Helpers.ReCaptcha.GetHtml(publicKey: "...")    
    <input type="submit" value="submit"/>
}

在服务器端

public ActionResult Captcha()
{
    var valid = Microsoft.Web.Helpers.ReCaptcha.Validate(privateKey: "...");
    if (valid)
    {
        return RedirectToAction("Contact");
    }
    else
    {
        ModelState.AddModelError("Captcha", "Bad input in captcha");
        return View("Index");
    }            
}

【讨论】:

  • 如何使用此方法验证 reCAPTCHA?
【解决方案2】:

到目前为止,这些都不起作用。 OP 使用 WebMatrix 和 Razer,而上面/下面的示例适用于 MVC 和常规 ASP.NET。

WebMatrix IDE 在 NuGet 中包含一个用于 reCAPTCHA 的包,但没有关于如何使用它的说明。

编辑:以下是在 WebMatrix 中使用 reCAPTCHA 的说明

http://www.asp.net/web-pages/tutorials/security/using-a-catpcha-to-prevent-automated-programs-%28bots%29-from-using-your-aspnet-web-site

简而言之,您需要打开 NuGet,安装 MS Webhelper 库和 reCAPTCHA。然后按照建议添加/编辑 _AppStart.cshtml 并检查页面上的示例代码。

【讨论】:

    【解决方案3】:

    在 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="Your private key here" />
         <add key="ReCaptchaPublicKey" value="Your public key here" />
     </appSettings>
    

    在查看文件夹\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>
    

    在cshtml中

    把它放在最上面

    @using Recaptcha;
    

    把它放在你想显示的地方

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

    在控制器中

        [HttpPost]
        [RecaptchaControlMvc.CaptchaValidator]
        public ActionResult Index(Home home, bool captchaValid, string captchaErrorMessage)
        {
            if (ModelState.IsValid)
            {
                if (captchaValid)
                {
                    //return RedirectToAction("AnswerSecurityQuestion", new { username = model.Username });
                    return View(home);
                }
                ModelState.AddModelError("", captchaErrorMessage);
                home.recap_errorRaise = captchaErrorMessage;
            }
            return View(home);
        }
    

    【讨论】:

    • 他说他使用的不是 MVC 或 Webform,而是“网页”。你的回答是针对 MVC 的。
    【解决方案4】:

    将来自https://developers.google.com/recaptcha/docs/language 的语言值放入资源文件中。 示例(@Resource.CaptchaLanguage 值 = 'en')

    <script src="https://www.google.com/recaptcha/api.js?hl=@Resource.CaptchaLanguage"></script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-21
      • 2017-03-18
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多