Как я могу поместить плагин reCAPTCHA ASP.NET в файл Razor (CSHTML)?

Позвольте мне начать с того, что я использую WebMatrix. Я пытаюсь добавить плагин reCAPTCHA на свой сайт ASP.NET. Я просмотрел краткое руководство для их ASP.NET плагин. Вот часть их примера:

<%@ 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>

Я знаю, что мне не понадобится "‹% @ Page Language = "VB"%> ", но я все еще новичок в Razor, поэтому как мне добавить ссылку на сборку reCAPTCHA и отобразить плагин в моя страница? Я сомневаюсь, что смогу использовать эту строку для справки по сборке:

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

Кроме того, могу ли я поместить <asp:???> теги и теги из сборки reCAPTCHA в свой документ CSHTML? Будет ли это действительно на веб-сайте WebMatrix:

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

В основном я спрашиваю, как добавить плагин reCAPTCHA в файл Razor C #.


person Brandon Miller    schedule 20.02.2013    source источник
comment
Возможно, стоит взглянуть на Отображение reCAPTCHA без плагинов.   -  person MikeSmithDev    schedule 20.02.2013
comment
или ... плагин, разработанный для MVC (возможно, проще найти, чем веб-формы на самом деле)   -  person Scott Selby    schedule 20.02.2013
comment
Для MVC вы можете сделать это: mvcrecaptcha.codeplex.com Но вы используете веб-страницы с Razor, исправьте ?   -  person Brian Mains    schedule 20.02.2013
comment
@ScottSelby Брайан прав, я не использую MVC, я использую веб-страницы.   -  person Brandon Miller    schedule 21.02.2013


Ответы (4)


В библиотеку 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");
    }            
}
person Joe    schedule 20.02.2013
comment
Как я могу проверить reCAPTCHA с помощью этого метода? - person Brandon Miller; 21.02.2013

Пока ничего из этого не работает. OP использует WebMatrix и Razer, тогда как примеры выше / ниже предназначены для MVC и обычного ASP.NET.

IDE WebMatrix включает в себя пакет NuGet для reCAPTCHA, однако нет инструкций по его использованию.

Изменить: вот инструкции по использованию reCAPTCHA с WebMatrix

http://www.asp.net/web-pages/tutorials/security/using-a-catpcha-to-prevent-automated-programs-%28bots%29-from-using-your-aspnet-веб-сайт

Вкратце, вам нужно открыть NuGet, установить библиотеку MS Webhelper и reCAPTCHA. Затем добавьте / отредактируйте _AppStart.cshtml в соответствии с рекомендациями и проверьте пример кода на странице.

person Bob    schedule 17.12.2013

в 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);
    }
person vegas red    schedule 11.03.2013
comment
Он сказал, что использует не MVC или Webform, а «веб-страницы». Вы отвечаете за MVC. - person Danniel Little; 22.06.2016

Поместите значение языка из https://developers.google.com/recaptcha/docs/language в файле ресурсов. пример (@ Resource.CaptchaLanguage value = 'en')

<script src="https://www.google.com/recaptcha/[email protected]"></script>
person Velibor    schedule 10.06.2019