AdminCaptchaController.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. using System.Threading.Tasks;
  3. using GxPress.Common.Tools;
  4. using GxPress.Result.Captcha;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.Extensions.Caching.Distributed;
  7. using GxPress.Common.Extensions;
  8. namespace GxPress.Api.AdminControllers
  9. {
  10. /// <summary>
  11. /// 验证码
  12. /// </summary>
  13. [Route("api/admin/captcha")]
  14. [ApiController]
  15. public class AdminCaptchaController : ControllerBase
  16. {
  17. //验证码过期时间
  18. private readonly IDistributedCache _cache;
  19. public AdminCaptchaController(IDistributedCache cache) {
  20. _cache = cache;
  21. }
  22. /// <summary>
  23. /// 获取验证码图片和Guid
  24. /// </summary>
  25. [HttpGet("image")]
  26. public async Task<CaptchaResult> GetCaptchaImage()
  27. {
  28. await using var ms = CaptchaHelper.Create(out var code);
  29. var guid = Guid.NewGuid();
  30. //将Guid和验证码值存入redis
  31. await _cache.SetAsync($"captcha:{guid.ToString()}", code, new DistributedCacheEntryOptions
  32. {
  33. AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(300)
  34. });
  35. var result = new CaptchaResult
  36. {
  37. CaptchaImg = Convert.ToBase64String(ms.ToArray()),
  38. CaptchaGuid = guid
  39. };
  40. return result;
  41. }
  42. }
  43. }