#asp.net-core #razor-pages #botdetect
Вопрос:
Я решил использовать капчу BotDetect в своем проекте, чтобы остановить спам, однако я не смог проверить, правильно ли пользователь ввел капчу, так как страницы Razor не поддерживают фильтры.
На своем сайте они говорят, чтобы использовать этот атрибут, чтобы проверить, действительна ли капча
[CaptchaValidationActionFilter("CaptchaCode", "ExampleCaptcha", "Wrong Captcha!")]
Однако страницы razor не допускают атрибутов в методах страниц.
Покопавшись в исходном коде атрибута, я нашел это
MvcCaptcha mvcCaptcha = new MvcCaptcha(this.CaptchaId);
if (mvcCaptcha.IsSolved) { }
Однако, когда я пробовал этот код непосредственно в OnPost
методе, mvcCaptch.IsSolved
он всегда возвращал значение false.
Проверка переменных сеанса также показывает все BDC_
значения, необходимые для работы этого элемента управления, поэтому здесь я уперся в стену. Надеялся, что кто-нибудь сможет мне помочь. Спасибо.
Официальные документы, если это поможет, хотя я не смог найти никаких ссылок на страницы Razor на сайте https://captcha.com/mvc/mvc-captcha.html
Комментарии:
1. Можете ли вы сказать нам, какая версия Asp.net основная версия, которую вы используете? Из документа мы можем найти его поддержку ASP.NET Ядро MVC 1/2, но не уверен, поддерживает ли оно Asp.net ядро 3 и поддерживает ли оно приложение razor page или нет?
2. Последняя версия, 3.1. Я просто подумал, что будет какой-то способ проверить капчу. Конечно, данные там есть?
Ответ №1:
Я обнаружил CaptchaModelStateValidation
, что есть атрибут, который вы можете применить к свойству модели страницы Razor, привязанному к вводу кода captcha. Таким образом, вы автоматически получите подтверждение в ModelState
.
Вот пример модели, которая проверяет капчу.
public class CaptchaValidatorModel : PageModel
{
public void OnPost()
{
if (ModelState.IsValid)
{
// Perform actions on valid captcha.
}
}
[BindProperty]
[Required] // You need this so it is not valid if the user does not input anything
[CaptchaModelStateValidation("ExampleCaptcha")]
public string CaptchaCode { get; set; }
}
На странице используется код, приведенный в примере документации.
@page
@model CaptchaWebApplication.Pages.CaptchaValidatorModel
@{
ViewData["Title"] = "Captcha";
}
<form method="post">
<label asp-for="CaptchaCode">Retype the code from the picture:</label>
<captcha id="ExampleCaptcha" user-input-id="CaptchaCode" />
<div class="actions">
<input asp-for="CaptchaCode" />
<input type="submit" value="Validate" />
<span asp-validation-for="CaptchaCode"></span>
@if ((HttpContext.Request.Method == "POST") amp;amp; ViewData.ModelState.IsValid)
{
<span class="correct">Correct!</span>
}
</div>
</form>