C# 实现图片验证码的 WebAPI 版(ASP.NET Core)

简介: 基于ASP.NET Core实现的验证码服务,生成带干扰线和随机旋转文字的4位图文验证码,支持内存存储与验证。需安装System.Drawing.Common包。

using Microsoft.AspNetCore.Mvc;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

[ApiController]
[Route("api/[controller]")]
public class CaptchaController : ControllerBase
{
// 存储验证码的内存缓存(生产环境建议用分布式缓存)
private static readonly ConcurrentDictionary _captchaStore = new();

// 获取验证码图片
[HttpGet("image/{token}")]
public IActionResult GetCaptchaImage(string token, int width = 120, int height = 40)
{
    // 生成4位数字+字母验证码
    var captchaCode = GenerateRandomCode(4);
    _captchaStore[token] = captchaCode;

    // 创建位图
    using var bitmap = new Bitmap(width, height);
    using var g = Graphics.FromImage(bitmap);
    // 设置背景色
    g.Clear(Color.White);

    // 绘制干扰线
    var random = new Random();
    for (int i = 0; i < 5; i++)
    {
        using var pen = new Pen(Color.FromArgb(random.Next(256), random.Next(256), random.Next(256)), 1);
        g.DrawLine(pen, random.Next(width), random.Next(height), random.Next(width), random.Next(height));
    }

    // 绘制验证码文字
    using var font = new Font("Arial", 18, FontStyle.Bold | FontStyle.Italic);
    for (int i = 0; i < captchaCode.Length; i++)
    {
        using var brush = new SolidBrush(Color.FromArgb(random.Next(256), random.Next(256), random.Next(256)));
        // 文字随机偏移和旋转
        var x = 10 + i * 25;
        var y = random.Next(5, 15);
        g.RotateTransform(random.Next(-15, 15));
        g.DrawString(captchaCode[i].ToString(), font, brush, x, y);
        g.ResetTransform();
    }

    // 绘制干扰点
    for (int i = 0; i < 200; i++)
    {
        bitmap.SetPixel(random.Next(width), random.Next(height), Color.FromArgb(random.Next(256)));
    }

    // 输出图片流
    using var ms = new MemoryStream();
    bitmap.Save(ms, ImageFormat.Png);
    return File(ms.ToArray(), "image/png");
}

// 验证验证码
[HttpPost("verify/{token}")]
public IActionResult VerifyCaptcha(string token, [FromBody] string inputCode)
{
    if (_captchaStore.TryGetValue(token, out var realCode))
    {
        _captchaStore.TryRemove(token, out _); // 验证后立即失效
        if (string.Equals(realCode, inputCode, StringComparison.OrdinalIgnoreCase))
        {
            return Ok(new { Success = true, Message = "验证通过" });
        }
    }
    return Ok(new { Success = false, Message = "验证码错误或已过期" });
}

// 生成随机验证码
private string GenerateRandomCode(int length)
{
    var chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"; // 排除易混淆字符
    var random = new Random();
    var code = new char[length];
    for (int i = 0; i < length; i++)
    {
        code[i] = chars[random.Next(chars.Length)];
    }
    return new string(code);
}

}
注意:ASP.NET Core 项目需安装System.Drawing.Common NuGet 包。

相关文章
|
1月前
|
C#
C# 利用特性(Attribute)实现自定义验证
通过自定义特性(如RequiredAttribute)标记类属性,利用反射实现数据验证逻辑。示例代码展示了如何在对象中检查必填字段,并输出验证错误信息,实现灵活的数据校验机制。
|
1月前
|
云安全 人工智能 安全
阿里云2026云上安全健康体检正式开启
新年启程,来为云上环境做一次“深度体检”
1708 6
|
1月前
|
存储 弹性计算 安全
什么是阿里云服务器ECS?从0到1看懂ECS详解、优势、功能、费用及使用问题解答FAQ
阿里云ECS是高性能、高稳定的弹性计算服务,依托自研技术提供全栈优化算力,支持多种业务场景。具备99.975%高可用性、全方位安全防护与全球部署能力,灵活计费模式助力企业降本增效,是数字化转型的理想选择。
293 4
|
1月前
|
人工智能 Java Go
2026年免费AI编程助手测评:通义灵码领衔,谁是国产开发者的最佳Copilot?
随着 Qwen 2.5-Coder 等开源模型的爆发,2026年 AI 编程工具已进入“百模大战”的深水区。本文基于代码生成准确率、中文语境理解能力及免费额度三大维度,对市场主流工具进行实测
|
3月前
|
Linux 网络安全 开发工具
liunx环境手动安装.net8的教程
本教程适用于 Linux 环境,核心为手动安装.NET 8。步骤包括下载对应 Linux 架构的.NET 8 安装包,解压至指定目录,配置环境变量以确保系统识别,最后通过命令验证安装是否成功。整个过程无需依赖自动安装工具,操作简洁,可满足用户在 Linux 系统中手动部署.NET 8 的需求。
982 3
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
591 2
|
存储 开发框架 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(9) -- 实现系统动态菜单的配置和权限分配
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(9) -- 实现系统动态菜单的配置和权限分配
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
827 8
|
存储 缓存 数据安全/隐私保护
【.NET Core】深入理解IO - FileSteam流
【.NET Core】深入理解IO - FileSteam流
321 2
|
前端开发
uniapp 实战 -- app 的自动升级更新(含生成 app 发布页)
uniapp 实战 -- app 的自动升级更新(含生成 app 发布页)
3443 1

热门文章

最新文章