gpt4 book ai didi

asp.net-mvc - 如何在 asp.net core Asp.net Mvc 6 中创建验证码?

转载 作者:行者123 更新时间:2023-12-02 02:41:43 26 4
gpt4 key购买 nike

我正在 asp.net core 中开发 asp.net MVC 6 应用程序,我想为我的登录页面创建一个验证码。在以前的.net框架中,我使用system.drawing来创建验证码,但由于在.net框架核心中我们没有system.drawing,我该如何实现这一点?

一个解决方案是引用完整的.net框架,但这不是我想要的。我想使用核心框架。

另一种是使用.net Framework 6和Mvc 5创建一个项目并使用Web api来获取验证码图像,但这也不是我想要的。

还有其他解决办法吗?

最佳答案

我在 ASP.NET Core 应用程序中实现了 Recaptcha。在我的登录 View 中:

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

}

我在 Controller 上实现了一个扩展方法,这样我就可以从我使用它的任何 Controller 轻松验证验证码服务器端。

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 中的登录发布方法中的这段代码使用该扩展方法检查验证码服务器端:

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);
}
}

请注意,要在 Controller 上调用扩展方法,您必须使用 this 关键字。

我目前在多个项目中使用它,所以如果您需要查看更多代码,最简单的是我的 SimpleAuth项目,但我也在使用它 cloudscribe

关于asp.net-mvc - 如何在 asp.net core Asp.net Mvc 6 中创建验证码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37223861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com