Редактировать: я добавил демонстрационный проект.Проверьте этот репозиторий GitHub.https://github.com/NIHAR-SARKAR/GoogleRecaptchav3-example-In-asp.net
Из внешнего интерфейса (страница .aspx) вам необходимо отправить ajax-запрос на передачу токена на внутренний сервер.Используя recaptcha.execute, вы можете получить ответ и передать токен с помощью ajax-запроса. Пожалуйста, проверьте кодовый блок.
<script src="http://www.google.com/recaptcha/api.js?render=recaptchaSiteKey"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('recaptchaSiteKey', {action: 'homepage'}).then(function(token) {
$.ajax({
//pass the toket to Webmethod using Ajax
});
});
});
</script>
Ссылка: https://developers.google.com/recaptcha/docs/verify https://developers.google.com/recaptcha/docs/display#js_api
Теперь в aspx.cs вам нужно написать «[WebMethod]» для получения токена из запроса Ajax.
[WebMethod]
public static void CaptchaVerify(string token)
{
var responseString = RecaptchaVerify(token);
ResponseToken response = new ResponseToken();
response = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseToken>(responseString.Result);
}
Чтобы получить ответ от Google recapcha, вам нужно использовать асинхронный вызов с использованием httpClient.вам также нужно создать класс, который будет содержать те же свойства, что и строка ответа.После получения responseString вам необходимо преобразовать ответ в объект ResponseToken с помощью Newtonsoft.Json.response = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseToken>(responseString.Result);
private string apiAddress = "https://www.google.com/recaptcha/api/siteverify";
private string recaptchaSecret = googleRecaptchaSecret;
public async Task<string> 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<string> ErrorCodes { get; set; }
public bool Success { get; set; }
public string hostname { get; set; }
}