Как поместить плагин 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#.
3 ответа
В библиотеке 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");
}
}
Пока что ничего из этого не работает. OP использует WebMatrix и Razer, тогда как примеры выше / ниже предназначены для MVC и обычного ASP.NET.
IDE WebMatrix включает пакет в NuGet для reCAPTCHA, но не содержит инструкций по его использованию.
Изменить: Вот инструкции по использованию reCAPTCHA с WebMatrix
Короче говоря, вам нужно открыть NuGet, установить библиотеку MS Webhelper и reCAPTCHA. Затем добавьте / отредактируйте _AppStart.cshtml в соответствии с рекомендациями и проверьте код примера на странице.
Поместите значение языка из https://developers.google.com/recaptcha/docs/language в файл ресурсов. пример (@Resource.CaptchaLanguage value = 'en')
<script src="https://www.google.com/recaptcha/api.js?hl=@Resource.CaptchaLanguage"></script>
В 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);
}