Edi.Captcha
3.20.0
See the version list below for details.
dotnet add package Edi.Captcha --version 3.20.0
NuGet\Install-Package Edi.Captcha -Version 3.20.0
<PackageReference Include="Edi.Captcha" Version="3.20.0" />
paket add Edi.Captcha --version 3.20.0
#r "nuget: Edi.Captcha, 3.20.0"
// Install Edi.Captcha as a Cake Addin #addin nuget:?package=Edi.Captcha&version=3.20.0 // Install Edi.Captcha as a Cake Tool #tool nuget:?package=Edi.Captcha&version=3.20.0
Edi.Captcha.AspNetCore
The Captcha module used in my blog
Usage
0. Install from NuGet
NuGet Package Manager
Install-Package Edi.Captcha
or .NET CLI
dotnet add package Edi.Captcha
1. Register in DI
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.HttpOnly = true;
});
services.AddSessionBasedCaptcha();
// Don't forget to add this line in your `Configure` method.
app.UseSession();
or you can customize the options
services.AddSessionBasedCaptcha(option =>
{
option.Letters = "2346789ABCDEFGHJKLMNPRTUVWXYZ";
option.SessionName = "CaptchaCode";
option.CodeLength = 4;
});
2. Generate Image
Using MVC Controller
private readonly ISessionBasedCaptcha _captcha;
public SomeController(ISessionBasedCaptcha captcha)
{
_captcha = captcha;
}
[Route("get-captcha-image")]
public IActionResult GetCaptchaImage()
{
var s = _captcha.GenerateCaptchaImageFileStream(
HttpContext.Session,
100,
36
);
return s;
}
Using Middleware
app.UseSession().UseCaptchaImage(options =>
{
options.RequestPath = "/captcha-image";
options.ImageHeight = 36;
options.ImageWidth = 100;
});
3. Add CaptchaCode Property to Model
[Required]
[StringLength(4)]
public string CaptchaCode { get; set; }
5. View
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<img id="img-captcha" src="~/captcha-image" />
</div>
<input type="text"
asp-for="CommentPostModel.CaptchaCode"
class="form-control"
placeholder="Captcha Code"
autocomplete="off"
minlength="4"
maxlength="4" />
</div>
<span asp-validation-for="CommentPostModel.CaptchaCode" class="text-danger"></span>
</div>
6. Validate Input
_captcha.ValidateCaptchaCode(model.CommentPostModel.CaptchaCode, HttpContext.Session)
To make your code look more cool, you can also write an Action Filter like this:
public class ValidateCaptcha : ActionFilterAttribute
{
private readonly ISessionBasedCaptcha _captcha;
public ValidateCaptcha(ISessionBasedCaptcha captcha)
{
_captcha = captcha;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
var captchaedModel =
context.ActionArguments.Where(p => p.Value is ICaptchable)
.Select(x => x.Value as ICaptchable)
.FirstOrDefault();
if (null == captchaedModel)
{
context.ModelState.AddModelError(nameof(captchaedModel.CaptchaCode), "Captcha Code is required");
context.Result = new BadRequestObjectResult(context.ModelState);
}
else
{
if (!_captcha.Validate(captchaedModel.CaptchaCode, context.HttpContext.Session))
{
context.ModelState.AddModelError(nameof(captchaedModel.CaptchaCode), "Wrong Captcha Code");
context.Result = new ConflictObjectResult(context.ModelState);
}
else
{
base.OnActionExecuting(context);
}
}
}
}
and then
services.AddScoped<ValidateCaptcha>();
and then
public class YourModelWithCaptchaCode : ICaptchable
{
public string YourProperty { get; set; }
[Required]
[StringLength(4)]
public string CaptchaCode { get; set; }
}
[ServiceFilter(typeof(ValidateCaptcha))]
public async Task<IActionResult> SomeAction(YourModelWithCaptchaCode model)
{
// ....
}
Refer to https://edi.wang/post/2018/10/13/generate-captcha-code-aspnet-core
免责申明
此项目(Edi.Captcha.AspNetCore)及其配套组件均为免费开源的产品,仅用于学习交流,并且不直接向中国提供服务,中国用户请于下载后立即删除。
任何中国境内的组织及个人不得使用此项目(Edi.Captcha.AspNetCore)及其配套组件构建任何形式的面向中国境内用户的网站或服务。
不可用于任何违反中华人民共和国(含台湾省)或使用者所在地区法律法规的用途。
因为作者即本人仅完成代码的开发和开源活动(开源即任何人都可以下载使用),从未参与用户的任何运营和盈利活动。
且不知晓用户后续将程序源代码用于何种用途,故用户使用过程中所带来的任何法律责任即由用户自己承担。
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- SixLabors.ImageSharp.Drawing (>= 2.1.0)
-
net8.0
- SixLabors.ImageSharp.Drawing (>= 2.1.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Edi.Captcha:
Package | Downloads |
---|---|
MoongladePure.Comments
Package Description |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on Edi.Captcha:
Repository | Stars |
---|---|
EdiWang/Moonglade
Blog system of https://edi.wang, runs on Microsoft Azure
|
|
AiursoftWeb/Infrastructures
Mirror of: https://gitlab.aiursoft.cn/aiursoft/infrastructures
|
Version | Downloads | Last updated |
---|---|---|
3.25.0 | 419 | 11/13/2024 |
3.24.0 | 1,220 | 8/11/2024 |
3.23.1 | 514 | 7/14/2024 |
3.23.0 | 173 | 7/8/2024 |
3.22.0 | 940 | 5/19/2024 |
3.21.2 | 1,088 | 3/11/2024 |
3.21.1 | 1,116 | 1/29/2024 |
3.21.0 | 898 | 12/15/2023 |
3.20.0 | 312 | 12/11/2023 |
3.19.1 | 1,376 | 11/6/2023 |
3.19.0 | 531 | 10/11/2023 |
3.18.0 | 763 | 9/16/2023 |
3.17.0 | 570 | 8/29/2023 |
3.16.0 | 859 | 7/13/2023 |
3.15.0 | 4,124 | 1/5/2023 |
3.14.0 | 1,328 | 11/9/2022 |
3.13.1 | 3,795 | 9/14/2022 |
3.13.0 | 4,128 | 7/31/2022 |
3.12.0 | 406 | 7/31/2022 |
3.11.0 | 1,546 | 6/12/2022 |
3.10.0 | 2,562 | 2/9/2022 |
3.9.0 | 567 | 1/10/2022 |
3.8.0 | 268 | 1/9/2022 |
3.7.0 | 448 | 12/9/2021 |
3.6.1 | 807 | 12/8/2021 |
3.6.0 | 509 | 11/13/2021 |
3.5.0 | 494 | 11/9/2021 |
3.4.0 | 354 | 11/9/2021 |
3.3.0 | 2,039 | 6/7/2021 |
3.2.0 | 1,427 | 4/1/2021 |
3.1.0 | 425 | 3/31/2021 |
3.0.1 | 2,988 | 11/27/2020 |
3.0.0 | 654 | 11/11/2020 |
2.2.0 | 3,905 | 12/4/2019 |
2.1.0 | 639 | 11/22/2019 |
2.0.0 | 1,025 | 9/24/2019 |
2.0.0-preview3 | 291 | 9/17/2019 |
2.0.0-preview2 | 288 | 9/15/2019 |
2.0.0-preview | 292 | 9/11/2019 |
1.3.1 | 1,430 | 5/1/2019 |
1.3.0 | 689 | 4/11/2019 |
1.2.0 | 885 | 1/30/2019 |
1.1.0 | 761 | 12/13/2018 |
1.0.0 | 1,436 | 11/11/2018 |