商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > .NET8集成阿里云短信服务实现短信发送功能

.NET8集成阿里云短信服务实现短信发送功能

  发布于2026-07-23 阅读(0)

扫一扫,手机访问

前言

信息验证码和通知功能,几乎成了现代应用的标配。阿里云信息服务作为国内主流的信息平台,接入流程其实并不复杂。今天这篇文章,就来手把手拆解一下,如何在.NET 8中搞定它。

一、准备工作

1.1 阿里云账号准备

首先要有个阿里云账号,并且完成实名认证。然后开通信息服务,申请信息签名和模板——这一步需要企业资质,个人开发者可能得想点办法。最后,拿到AccessKey ID和AccessKey Secret,接下来的配置全靠它们。

1.2 .NET 8项目创建

dotnet new webapi -n AliyunSmsDemo
cd AliyunSmsDemo

二、集成阿里云信息SDK

2.1 安装NuGet包

dotnet add package Aliyun.SDK.Core
dotnet add package Aliyun.SDK.Dysmsapi

2.2 配置阿里云信息参数

在appsettings.json里加上配置,记得把占位符换成真实信息:

{
  "AliyunSms": {
    "AccessKeyId": "your-access-key-id",
    "AccessKeySecret": "your-access-key-secret",
    "Endpoint": "dysmsapi.aliyuncs.com",
    "SignName": "your-sign-name",
    "TemplateCode": "your-template-code"
  }
}

2.3 创建配置类

public class AliyunSmsSettings
{
    public string AccessKeyId { get; set; }
    public string AccessKeySecret { get; set; }
    public string Endpoint { get; set; }
    public string SignName { get; set; }
    public string TemplateCode { get; set; }
}

三、实现信息发送服务

3.1 创建信息服务接口

public interface ISmsService
{
    Task SendVerificationCodeAsync(string phoneNumber, string code);
}

3.2 实现信息服务

public class AliyunSmsService : ISmsService
{
    private readonly AliyunSmsSettings _settings;
    private readonly ILogger _logger;

    public AliyunSmsService(IOptions settings, ILogger logger)
    {
        _settings = settings.Value;
        _logger = logger;
    }

    public async Task SendVerificationCodeAsync(string phoneNumber, string code)
    {
        try
        {
            var client = CreateClient();
            var request = new SendSmsRequest
            {
                PhoneNumbers = phoneNumber,
                SignName = _settings.SignName,
                TemplateCode = _settings.TemplateCode,
                TemplateParam = $"{{\"code\":\"{code}\"}}"
            };
            var response = await client.SendSmsAsync(request);
            
            _logger.LogInformation($"信息发送结果: {JsonSerializer.Serialize(response)}");
            
            return response.Body.Code == "OK";
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "发送信息时发生异常");
            return false;
        }
    }

    private DysmsapiClient CreateClient()
    {
        var config = new Config
        {
            AccessKeyId = _settings.AccessKeyId,
            AccessKeySecret = _settings.AccessKeySecret,
            Endpoint = _settings.Endpoint
        };
        return new DysmsapiClient(config);
    }
}

3.3 注册服务

在Program.cs中添加:

builder.Services.Configure(builder.Configuration.GetSection("AliyunSms"));
builder.Services.AddTransient();

四、创建控制器

[ApiController]
[Route("api/[controller]")]
public class SmsController : ControllerBase
{
    private readonly ISmsService _smsService;
    private readonly ILogger _logger;

    public SmsController(ISmsService smsService, ILogger logger)
    {
        _smsService = smsService;
        _logger = logger;
    }

    [HttpPost("send-verification-code")]
    public async Task SendVerificationCode([FromBody] SendVerificationCodeRequest request)
    {
        var code = new Random().Next(100000, 999999).ToString();

        var result = await _smsService.SendVerificationCodeAsync(request.PhoneNumber, code);

        if (result)
        {
            _logger.LogInformation($"验证码发送成功: {code}");
            return Ok(new { Success = true, Message = "验证码发送成功" });
        }

        return BadRequest(new { Success = false, Message = "验证码发送失败" });
    }
}

public class SendVerificationCodeRequest
{
    [Required]
    [Phone]
    public string PhoneNumber { get; set; }
}

五、测试与优化

5.1 单元测试

[Fact]
public async Task SendVerificationCode_ShouldReturnSuccess_WhenSmsSent()
{
    var mockSmsService = new Mock();
    mockSmsService.Setup(x => x.SendVerificationCodeAsync(It.IsAny(), It.IsAny()))
                 .ReturnsAsync(true);

    var controller = new SmsController(mockSmsService.Object, Mock.Of>());
    var request = new SendVerificationCodeRequest { PhoneNumber = "13800138000" };

    var result = await controller.SendVerificationCode(request);

    var okResult = Assert.IsType(result);
    var response = Assert.IsType(okResult.Value);
    Assert.True(response.Success);
}

5.2 性能优化建议

几条实用建议:

  • 使用HttpClient池化技术,避免频繁创建连接。
  • 实现信息发送限流,防止短时间内请求过多。
  • 用缓存存储验证码,避免重复生成,同时设置过期时间。
  • 考虑异步发送队列,提升系统响应速度。

六、安全注意事项

安全无小事,尤其是涉及信息验证码这种敏感功能。下面几点需要特别注意:

  • AccessKey不要硬编码在代码里,要用安全的方式存储,比如环境变量或密钥管理服务。
  • 实现信息发送频率限制,防止被恶意利用进行信息轰炸。
  • 验证码必须设有效期,通常5-10分钟,过期自动失效。
  • 对手机号做格式验证和黑名单检查,不合规的直接拦截。
  • 敏感操作记录日志,方便事后追溯。

七、总结

这篇文章完整梳理了在.NET 8中集成阿里云信息服务的流程,从账号准备、SDK集成,到服务封装、控制器创建,再到测试优化和安全注意事项,基本上覆盖了开发中的关键环节。

跟着步骤走一遍,应该就能在自己的项目中快速实现信息发送功能,为应用增加信息验证和通知能力。当然,生产环境里还需要根据实际业务做更多打磨,比如高并发下的限流策略、多区域部署等,但核心链路已经清楚了。

本文转载于:https://www.jb51.net/aspnet/342949y84.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注