Net6 Web API 生成图形验证码并存入 Redis,输出 Base64 和校验图片验证码

本文将介绍如何在 Net6 Web API 项目中使用 Redis 缓存生成图形验证码,并将验证码图片以 Base64 格式输出,同时提供校验图片验证码的接口实现。

安装 NuGet 包

首先,需要在 Net6 Web API 项目中安装以下 NuGet 包:

  • Microsoft.AspNetCore.Mvc.Core
  • Microsoft.AspNetCore.Mvc.NewtonsoftJson
  • Microsoft.Extensions.Caching.StackExchangeRedis

生成图形验证码并存入 Redis

[HttpGet("captcha")]
public async Task<IActionResult> GetCaptcha()
{
    var captcha = new Captcha();
    var imageData = captcha.DrawImage();
    var base64 = Convert.ToBase64String(imageData);
    var key = Guid.NewGuid().ToString();

    // 将验证码图片数据存入redis,并设置过期时间为5分钟
    await _cache.SetStringAsync(key, captcha.Text, new DistributedCacheEntryOptions
    {
        AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
    });

    return Ok(new { Key = key, Image = base64 });
}

该方法使用 Captcha.NET 库生成一个随机的验证码图形,并将图形数据转换成 Base64 字符串。然后,使用 Guid 生成一个唯一的 key,将验证码文本存入 Redis,并将 key 和图形数据返回给客户端。

校验图形验证码

[HttpPost("captcha")]
public async Task<IActionResult> VerifyCaptcha([FromBody] VerifyCaptchaRequest request)
{
    var key = request.Key;
    var value = request.Value;

    if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
    {
        return BadRequest("Invalid captcha data");
    }

    // 从redis中获取验证码文本
    var captchaText = await _cache.GetStringAsync(key);

    if (captchaText == null)
    {
        return BadRequest("Invalid captcha key");
    }

    // 比较验证码文本是否一致
    if (!string.Equals(captchaText, value, StringComparison.OrdinalIgnoreCase))
    {
        return BadRequest("Invalid captcha value");
    }

    // 验证通过,删除验证码数据
    await _cache.RemoveAsync(key);

    return Ok();
}

public class VerifyCaptchaRequest
{
    public string Key { get; set; }
    public string Value { get; set; }
}

该方法接受一个包含 key 和 value 的请求体,其中 key 为生成验证码时返回的 key,value 为用户输入的验证码。首先,检查请求数据是否有效,然后从 Redis 中获取验证码文本。如果验证码文本不存在或与用户输入的文本不一致,返回错误响应。否则,验证通过,删除验证码数据并返回成功响应。

配置 Redis 缓存

在 Startup.cs 文件中配置 Redis 缓存:

services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = Configuration.GetConnectionString("Redis");
    options.InstanceName = "Captcha";
});

总结

以上是生成图形验证码存入 Redis 并输出 Base64 和校验图片验证码的接口的实现方法。使用 Redis 缓存可以有效地提高验证码生成的效率,同时也可以方便地管理和验证验证码。

Net6 Web API 生成图形验证码并存入 Redis,输出 Base64 和校验图片验证码

原文地址: https://www.cveoy.top/t/topic/lwOR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录