Basta ya de investigar en otras páginas porque has llegado al sitio correcto, contamos con la respuesta que buscas pero sin complicarte.
Solución:
Hay algunos buenos ejemplos:
- MVC reCaptcha – haciendo que reCaptcha sea más MVC’ish.
- ReCaptcha Webhelper en ASP.NET MVC 3
- ReCaptcha Control para ASP.NET MVC de Google Code.
Esto también se ha cubierto antes en esta pregunta de desbordamiento de pila.
NuGet Google reCAPTCHA V2 para MVC 4 y 5
- Paquete NuGet
- Demostración y documento
Agregué reCaptcha a un proyecto en el que estoy trabajando actualmente. Lo necesitaba para usar la API de AJAX ya que el elemento reCaptcha se cargó dinámicamente en la página. No pude encontrar ningún control existente y la API es simple, así que creé la mía.
Publicaré mi código aquí en caso de que alguien lo encuentre útil.
1: agregue la etiqueta de secuencia de comandos a los encabezados de la página maestra
2: Agrega tu keys a la web.config
3: Cree las extensiones Atributo de acción y Html Helper
namespace [Your chosen namespace].ReCaptcha
public enum Theme Red, White, BlackGlass, Clean
[Serializable]
public class InvalidKeyException : ApplicationException
public InvalidKeyException()
public InvalidKeyException(string message) : base(message)
public InvalidKeyException(string message, Exception inner) : base(message, inner)
public class ReCaptchaAttribute : ActionFilterAttribute
public override void OnActionExecuting(ActionExecutingContext filterContext)
var userIP = filterContext.RequestContext.HttpContext.Request.UserHostAddress;
var privateKey = ConfigurationManager.AppSettings.GetString("ReCaptcha.PrivateKey", "");
if (string.IsNullOrWhiteSpace(privateKey))
throw new InvalidKeyException("ReCaptcha.PrivateKey missing from appSettings");
var postData = string.Format("&privatekey=0&remoteip=1&challenge=2&response=3",
privateKey,
userIP,
filterContext.RequestContext.HttpContext.Request.Form["recaptcha_challenge_field"],
filterContext.RequestContext.HttpContext.Request.Form["recaptcha_response_field"]);
var postDataAsBytes = Encoding.UTF8.GetBytes(postData);
// Create web request
var request = WebRequest.Create("http://www.google.com/recaptcha/api/verify");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postDataAsBytes.Length;
var dataStream = request.GetRequestStream();
dataStream.Write(postDataAsBytes, 0, postDataAsBytes.Length);
dataStream.Close();
// Get the response.
var response = request.GetResponse();
using (dataStream = response.GetResponseStream())
using (var reader = new StreamReader(dataStream))
var responseFromServer = reader.ReadToEnd();
if (!responseFromServer.StartsWith("true"))
((Controller)filterContext.Controller).ModelState.AddModelError("ReCaptcha", "Captcha words typed incorrectly");
public static class HtmlHelperExtensions
public static MvcHtmlString GenerateCaptcha(this HtmlHelper helper, Theme theme, string callBack = null)
const string htmlInjectString = @"
";
var publicKey = ConfigurationManager.AppSettings.GetString("ReCaptcha.PublicKey", "");
if (string.IsNullOrWhiteSpace(publicKey))
throw new InvalidKeyException("ReCaptcha.PublicKey missing from appSettings");
if (!string.IsNullOrWhiteSpace(callBack))
callBack = string.Concat(", callback: ", callBack);
var html = string.Format(htmlInjectString, publicKey, theme.ToString().ToLower(), callBack);
return MvcHtmlString.Create(html);
4: Agrega el captcha a tu vista
@using (Html.BeginForm("MyAction", "MyController"))
@Html.TextBox("EmailAddress", Model.EmailAddress)
@Html.GenerateCaptcha(Theme.White)
5: Agrega el attribute a tu acción
[HttpPost]
[ReCaptcha]
public ActionResult MyAction(MyModel model)
if (!ModelState.IsValid) // Will have a Model Error "ReCaptcha" if the user input is incorrect
return Json(new capthcaInvalid = true );
... other stuff ...
6: Tenga en cuenta que deberá volver a cargar el captcha después de cada publicación, incluso si era válido y otra parte del formulario no era válida. Utilizar Recaptcha.reload();
Solución simple y completa trabajando para mi Admite ASP.NET MVC 4 y 5 (Admite ASP.NET 4.0, 4.5 y 4.5.1)
Paso 1: Instale el paquete NuGet por “Paquete de instalación reCAPTCH.MVC“
Paso 2: Agrega tu Público y Privado key a su archivo web.config en la sección appsettings
Puedes crear una API key empareje para su sitio en https://www.google.com/recaptcha/intro/index.html y haga clic en Obtener reCAPTCHA en la parte superior de la página
Paso 3: Modifica tu formulario para incluir reCaptcha
@using reCAPTCHA.MVC
@using (Html.BeginForm())
@Html.Recaptcha()
@Html.ValidationMessage("ReCaptcha")
Etapa 4: implemente la acción del controlador que manejará el envío del formulario y la validación de Captcha
[CaptchaValidator(
PrivateKey = "your private reCaptcha Google Key",
ErrorMessage = "Invalid input captcha.",
RequiredMessage = "The captcha field is required.")]
public ActionResult MyAction(myVM model)
if (ModelState.IsValid) //this will take care of captcha
O
public ActionResult MyAction(myVM model, bool captchaValid)
if (captchaValid) //manually check for captchaValid
Si piensas que te ha resultado de utilidad nuestro artículo, sería de mucha ayuda si lo compartes con más seniors de este modo contrubuyes a extender nuestra información.