Я реализовал ReCaptcha в моих Ключевых приложениях ASP.NET. На мой взгляд входа:
@if (Model.RecaptchaSiteKey.Length > 0)
{
<script src='https://www.google.com/recaptcha/api.js'></script>
}
@if (Model.RecaptchaSiteKey.Length > 0)
{
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="g-recaptcha" data-sitekey="@Model.RecaptchaSiteKey"></div>
@Html.ValidationMessage("recaptchaerror", new { @class = "text-danger" })
</div>
</div>
}
я реализовал метод расширения на контроллере, так что я могу проверить на стороне сервера CAPTCHA, легко из любого контроллера, где я использую его.
public static async Task<RecaptchaResponse> ValidateRecaptcha(
this Controller controller,
HttpRequest request,
string secretKey)
{
var response = request.Form["g-recaptcha-response"];
var client = new HttpClient();
string result = await client.GetStringAsync(
string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}",
secretKey,
response)
);
var captchaResponse = JsonConvert.DeserializeObject<RecaptchaResponse>(result);
return captchaResponse;
}
Затем этот фрагмент из метода после входа в моем AccountController проверяет сторону CAPTCHA на сервере, используя этот метод расширения:
if ((Site.CaptchaOnLogin) && (Site.RecaptchaPublicKey.Length > 0))
{
var recpatchaSecretKey = Site.RecaptchaPrivateKey;
var captchaResponse = await this.ValidateRecaptcha(Request, recpatchaSecretKey);
if (!captchaResponse.Success)
{
ModelState.AddModelError("recaptchaerror", "reCAPTCHA Error occured. Please try again");
return View(model);
}
}
Обратите внимание, что для вызова методов расширения на контроллере вы должны использовать этот ключевое слово.
Я использую это в нескольких проектах в настоящее время, так что если вы хотите увидеть больше кода, самый простой в моей SimpleAuth проекте, но я также использую его cloudscribe
бы вы ни делали, не используйте https://captcha.com/asp.net-captcha.html. .. он вызывает режим прерывания приложения: | – AmiNadimi