一、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>();
四、实现要点说明
- 服务生命周期管理
- 使用AddTransient确保每次请求都创建新的服务实例
- 避免状态共享导致的并发问题
- 错误处理与日志
- 实现统一的异常处理机制
- 记录关键操作日志
- 返回友好的错误信息
- 安全性考虑
- 妥善保管AccessKey信息
- 验证码参数校验
- 防止重放攻击
五、常见问题解答
- 验证码无法显示?
- 检查AccessKey配置是否正确
- 确认阿里云服务是否正常开通
- 检查网络连接状态
- 验证失败?
- 检查参数格式是否正确
- 查看服务器日志定位问题
- 确认验证码是否过期
六、相关资源
结语
通过本文的介绍,您应该已经掌握了如何在.NET 6 WebApi中集成阿里云图形验证码的完整流程。如果您在实现过程中遇到任何问题,欢迎在评论区与我们交流讨论。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。