Страницы BotDetect и ASPNET Razor не проверяются

#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>