LazyCaptcha 是一个简单易用的 .NET 验证码组件,支持多种验证码类型、字体样式和图片配置。
dotnet add package Lazy.Captcha.Core
builder.Services.AddCaptcha(builder.Configuration);
public class CaptchaController : Controller
{
private readonly ICaptcha _captcha;
public CaptchaController(ICaptcha captcha)
{
_captcha = captcha;
}
// 生成验证码
public IActionResult Generate(string id)
{
var info = _captcha.Generate(id);
return File(info.Bytes, "image/gif");
}
// 校验验证码
public bool Validate(string id, string code)
{
return _captcha.Validate(id, code);
}
}
{
"CaptchaOptions": {
"CaptchaType": 10, // 验证码类型
"CodeLength": 4, // 验证码长度
"ExpirySeconds": 60, // 过期时间(秒)
"IgnoreCase": true, // 忽略大小写
"ImageOption": {
"Animation": true, // 是否启用动画
"FontSize": 36, // 字体大小
"Width": 150, // 宽度
"Height": 50 // 高度
}
}
}
{{configJson}}
{{curlCommand}}
{{httpRequest}}
Content-Type: image/gif
验证码ID: {{captchaId}}
💡 点击图片可刷新验证码
⚠️ 架构说明:
上方展示的验证码使用 /captcha/dynamic 接口,通过 CaptchaServiceBuilder 创建独立实例(支持自定义配置),因此无法直接校验。
下方提供使用注入实例的验证码用于校验测试(使用 appsettings.json 配置)。
💡 这是 LazyCaptcha 的架构设计:Builder方式适合灵活展示,注入方式适合业务校验。
验证码ID: {{testCaptchaId}}
使用 appsettings.json 配置(CodeLength=2, CaptchaType=10)
校验方式:{{validateResult.isReusable ? '可重复校验' : '一次性校验'}}
请求URL:{{validateResult.url}}
响应结果:{{validateResult.response}}
💡 提示:一次性校验模式下,验证成功后验证码会失效,后续请求会返回 false
💡 提示:可重复校验模式下,验证码可以多次验证(通过设置 removeIfSuccess=false)