Eliana, parte de este equipo de trabajo, nos ha hecho el favor de crear este escrito ya que conoce muy bien el tema.
Solución:
Lo más simple:
a) en cshtml (en la parte superior)
@section Scripts
b) en cshtml dentro del formulario (justo antes de / form>:
c) una función dentro de la clase Pagemodel:
public static bool ReCaptchaPassed(string gRecaptchaResponse)
HttpClient httpClient = new HttpClient();
var res = httpClient.GetAsync($"https://www.google.com/recaptcha/api/siteverify?secret=your secret key no quotes&response=gRecaptchaResponse").Result;
if (res.StatusCode != HttpStatusCode.OK)
return false;
string JSONres = res.Content.ReadAsStringAsync().Result;
dynamic JSONdata = JObject.Parse(JSONres);
if (JSONdata.success != "true")
return false;
return true;
Finalmente, dentro de OnPostAsync al principio:
if (!ModelState.IsValid)
return Page();
else
if (!ReCaptchaPassed(Request.Form["foo"]))
ModelState.AddModelError(string.Empty, "You failed the CAPTCHA.");
return Page();
Editar: he agregado un proyecto de demostración. Consulta este repositorio de github. https://github.com/NIHAR-SARKAR/GoogleRecaptchav3-example-In-asp.net
Desde el frontend (página .aspx) debe enviar una solicitud ajax para pasar el token al servidor backend. Usando “recaptcha.execute” U puede obtener la respuesta y pasar el token usando la solicitud ajax. Por favor, verifique el bloque de código.
Enlace de referencia: https://developers.google.com/recaptcha/docs/verify https://developers.google.com/recaptcha/docs/display#js_api
Ahora en aspx.cs necesitas escribir un “[WebMethod]”para recibir el token de la solicitud Ajax.
[WebMethod]
public static void CaptchaVerify(string token)
var responseString = RecaptchaVerify(token);
ResponseToken response = new ResponseToken();
response = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString.Result);
Para obtener la respuesta de google recapcha api, debe usar la llamada asíncrona usando httpClient. también necesita crear una clase que contendrá las mismas propiedades que la respuesta string . Después de obtener “responseString”, debe convertir la respuesta al objeto ResponseToken utilizando Newtonsoft.Json.
response = Newtonsoft.Json.JsonConvert.DeserializeObject
private string apiAddress = "https://www.google.com/recaptcha/api/siteverify";
private string recaptchaSecret = googleRecaptchaSecret;
public async Task RecaptchaVerify(string recaptchaToken)
string url = $"apiAddress?secret=recaptchaSecret&response=recaptchaToken";
using (var httpClient = new HttpClient())
try
string responseString= httpClient.GetStringAsync(url).Result;
return responseString;
catch (Exception ex)
throw new Exception(ex.Message);
public class ResponseToken
public DateTime challenge_ts get; set;
public float score get; set;
public List ErrorCodes get; set;
public bool Success get; set;
public string hostname get; set;
Hay varias bibliotecas de Recaptcha disponibles para ASP.Net. Elegí usar reCAPTCHA.AspNetCore porque proporciona un HtmlHelper.
Tenga en cuenta que esta biblioteca solo admite un ReCatpcha por página y no admite el monitoreo pasivo de Recaptcha v3 en páginas que no son de formulario.
Te mostramos reseñas y valoraciones
Si tienes alguna incertidumbre y forma de acrecentar nuestro reseña eres capaz de realizar una interpretación y con deseo lo ojearemos.