僵尸检测和asp.net Razor页面未验证



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

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

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

但是,razor页面不允许在页面方法中使用属性。

在深入研究该属性的源代码时,我发现了这个
MvcCaptcha mvcCaptcha = new MvcCaptcha(this.CaptchaId);
if (mvcCaptcha.IsSolved) { }

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

检查会话变量还显示了该控件工作所需的所有BDC_值,因此我在这里遇到了瓶颈。希望有人能帮我。谢谢。

官方文档,如果它有帮助,虽然,我找不到任何参考剃刀页面的网站https://captcha.com/mvc/mvc-captcha.html

我发现有一个属性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>

最新更新