4

我决定在我的项目中使用 BotDetect Captcha 来阻止垃圾邮件,但是,由于 Razor Pages 不支持过滤器,我无法检查用户是否输入了正确的验证码。

在他们的网站上,他们说使用此属性来检查验证码是否有效

[CaptchaValidationActionFilter("CaptchaCode", "ExampleCaptcha", "Wrong Captcha!")]

但是,剃刀页面不允许页面方法上的属性。

挖掘属性的源代码,我发现了这个

MvcCaptcha mvcCaptcha = new MvcCaptcha(this.CaptchaId);
if (mvcCaptcha.IsSolved) { }

但是,当我直接在OnPost方法中尝试该代码时,mvcCaptch.IsSolved总是返回 false。

检查会话变量还显示了BDC_此控件工作所需的所有值,所以我在这里碰壁了。希望有人可以帮助我。谢谢。

官方文档,如果它有帮助,虽然,我在网站https://captcha.com/mvc/mvc-captcha.html上找不到任何对 Razor 页面的引用

4

1 回答 1

1

我发现有一个属性CaptchaModelStateValidation属性可以应用于绑定到验证码输入的 Razor 页面模型属性。这样您就可以在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") && ViewData.ModelState.IsValid)
      {
         <span class="correct">Correct!</span>
      }
   </div>
</form>
于 2021-09-17T23:05:32.657 回答