Net6 Web API 生成图形验证码并存入 Redis,输出 Base64 和校验图片验证码
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 缓存可以有效地提高验证码生成的效率,同时也可以方便地管理和验证验证码。
原文地址: https://www.cveoy.top/t/topic/lwOR 著作权归作者所有。请勿转载和采集!