Добавить комментарий - CodeHelper

Добавить комментарий

Нужно сделать следующее:

Скачать и подключить к проекту библиотеку recaptcha для .NET с официальной страницы.

Для генерации кода на страницах

Создать helper метод:

public static class CaptchaExtensions
{
    public static string GenerateCaptcha(this HtmlHelper helper)
    {
        var captchaControl = new Recaptcha.RecaptchaControl
        {
                    ID = "recaptcha",
                    Theme = "white",
                    PublicKey = "ВАШ_ОТКРЫТЫЙ_КЛЮЧ",
                    PrivateKey = "ВАШ_ЗАКРЫТЫЙ_КЛЮЧ"
                };
            var htmlWriter = new HtmlTextWriter(new StringWriter());
        captchaControl.RenderControl(htmlWriter);
        return htmlWriter.InnerWriter.ToString();
    }
}

На нужных страницах сгенерировать код используя метод GenerateCaptcha:

<div>
    <label for="recaptcha_response_field">Введите слова на картинке</label>
    <%=Html.GenerateCaptcha()%>
    <%=Html.ValidationMessage("Captcha")%>
</div>

Для проверки введенной капчи на сервере

Создать атрибут:

public class CaptchaValidatorAttribute : ActionFilterAttribute
{
    private const string CHALLENGE_FIELD_KEY = "recaptcha_challenge_field";
    private const string RESPONSE_FIELD_KEY = "recaptcha_response_field";
    private const string CAPTCHA_MODEL_KEY = "Captcha";

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var captchaChallengeValue = filterContext.HttpContext.Request.Form[CHALLENGE_FIELD_KEY];
        var captchaResponseValue = filterContext.HttpContext.Request.Form[RESPONSE_FIELD_KEY];
        var captchaValidtor = new Recaptcha.RecaptchaValidator
                                  {
                                      PrivateKey = "ВАШ_ЗАКРЫТЫЙ_КЛЮЧ",
                                      RemoteIP = filterContext.HttpContext.Request.UserHostAddress,
                                      Challenge = captchaChallengeValue,
                                      Response = captchaResponseValue
                                  };

        var recaptchaResponse = captchaValidtor.Validate();

        if (!recaptchaResponse.IsValid)
        {
            filterContext.Controller
                .ViewData.ModelState
                .AddModelErrorWithValue(
                    CAPTCHA_MODEL_KEY,
                    "ТЕКСТ_СООБЩЕНИЯ_ОБ_ОШИБКЕ");
        }

        base.OnActionExecuting(filterContext);
    }
}

Применить этот атрибут к методу контроллера, принимающего POST формы с капчей.

Внимание! Вы собираетесь отправить информацию от имени анонимного пользователя.
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.