当前位置:首页>IT那点事>.NET 6 WebApi集成阿里云2.0图形验证码完整教程

.NET 6 WebApi集成阿里云2.0图形验证码完整教程

一、SDK安装配置

1.1 安装阿里云SDK

首先使用NuGet命令安装阿里云验证码SDK:

bashCopydotnet add package AlibabaCloud.SDK.Captcha20230305 --version 1.1.3

1.2 配置阿里云账户信息

在项目的appsettings.json中添加阿里云的AccessKey配置:

{
  "AliyunCaptcha": {
    "AccessKeyId": "你的AccessKeyId",
    "AccessKeySecret": "你的AccessKeySecret"
  }
  // 其他配置...
}

二、验证码服务实现

2.1 创建验证码服务类

创建CaptchaService类处理验证码相关业务逻辑:

using AlibabaCloud.SDK.Captcha20230305;
using AlibabaCloud.SDK.Captcha20230305.Models;
using AlibabaCloud.TeaUtil;
using AlibabaCloud.TeaUtil.Models;
using Microsoft.Extensions.Configuration;
using Tea;

public class CaptchaService
{
    private readonly Client _client;

    public CaptchaService(IConfiguration configuration)
    {
        var config = new AlibabaCloud.OpenApiClient.Models.Config
        {
            AccessKeyId = configuration["Aliyun:AccessKeyId"],
            AccessKeySecret = configuration["Aliyun:AccessKeySecret"],
            Endpoint = "captcha.cn-shanghai.aliyuncs.com"
        };
        _client = new Client(config);
    }

    public async Task<VerifyIntelligentCaptchaResponse> VerifyIntelligentCaptcha(string captchaVerifyParam)
    {
        var verifyIntelligentCaptchaRequest = new VerifyIntelligentCaptchaRequest
        {
            CaptchaVerifyParam = captchaVerifyParam
        };
        var runtime = new RuntimeOptions();
        try
        {
            return await _client.VerifyIntelligentCaptchaWithOptionsAsync(verifyIntelligentCaptchaRequest, runtime);
        }
        catch (TeaException error)
        {
            if (!Common.Empty(error.Code) && !Common.Empty(error.Message))
            {
                // 错误 SDK 的错误码
                // 错误 SDK 的错误信息
                // 错误 SDK 的请求 ID
                // error.Data 中获取更多错误信息
                throw;
            }
            throw;
        }
        catch (Exception _error)
        {
            var error = new TeaException(new Dictionary<string, object>
            {
                { "message", _error.Message }
            });
            throw;
        }
    }
}

2.2 创建API控制器

实现处理验证码请求的控制器:

using App.WebApi.Utilty.ApiResult;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]/[Action]")]
public class CaptchaController : ControllerBase
{
    private readonly CaptchaService _captchaService;

    public CaptchaController(CaptchaService captchaService)
    {
        _captchaService = captchaService;
    }

    [HttpPost]
    public async Task<ApiResult> VerifyCaptcha([FromBody] CaptchaVerifyModel model)
    {
        try
        {
            var response = await _captchaService.VerifyIntelligentCaptcha(model.CaptchaVerifyParam);
            Console.WriteLine(response.Body.Result.VerifyCode);
            if (response.Body.Result.VerifyResult == true)
            {
                return ApiResultHelper.Success("验证成功", true);
            }
            else
            {
                return ApiResultHelper.Error(response.Body.Result.VerifyCode);
            }
        }
        catch (Exception ex)
        {
            return ApiResultHelper.Error("服务器异常");
        }
    }
}

public class CaptchaVerifyModel
{
    public string CaptchaVerifyParam { get; set; }
}

三、服务注册与配置

在Program.cs中注册验证码服务:

builder.Services.AddTransient<CaptchaService>();

四、实现要点说明

  1. 服务生命周期管理
    • 使用AddTransient确保每次请求都创建新的服务实例
    • 避免状态共享导致的并发问题
  2. 错误处理与日志
    • 实现统一的异常处理机制
    • 记录关键操作日志
    • 返回友好的错误信息
  3. 安全性考虑
    • 妥善保管AccessKey信息
    • 验证码参数校验
    • 防止重放攻击

五、常见问题解答

  1. 验证码无法显示?
    • 检查AccessKey配置是否正确
    • 确认阿里云服务是否正常开通
    • 检查网络连接状态
  2. 验证失败?
    • 检查参数格式是否正确
    • 查看服务器日志定位问题
    • 确认验证码是否过期

六、相关资源

  1. 阿里云验证码官方文档
  2. .NET 6 WebApi文档

结语

通过本文的介绍,您应该已经掌握了如何在.NET 6 WebApi中集成阿里云图形验证码的完整流程。如果您在实现过程中遇到任何问题,欢迎在评论区与我们交流讨论。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
搜索

本站承接WordPress建站仿站、二次开发、主题插件定制等PHP开发服务!