发布于2026-07-23 阅读(0)
扫一扫,手机访问
信息验证码和通知功能,几乎成了现代应用的标配。阿里云信息服务作为国内主流的信息平台,接入流程其实并不复杂。今天这篇文章,就来手把手拆解一下,如何在.NET 8中搞定它。
首先要有个阿里云账号,并且完成实名认证。然后开通信息服务,申请信息签名和模板——这一步需要企业资质,个人开发者可能得想点办法。最后,拿到AccessKey ID和AccessKey Secret,接下来的配置全靠它们。
dotnet new webapi -n AliyunSmsDemo cd AliyunSmsDemo
dotnet add package Aliyun.SDK.Core dotnet add package Aliyun.SDK.Dysmsapi
在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"
}
}
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; }
}
public interface ISmsService
{
Task SendVerificationCodeAsync(string phoneNumber, string code);
}
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);
}
}
在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; }
}
[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);
}
几条实用建议:
安全无小事,尤其是涉及信息验证码这种敏感功能。下面几点需要特别注意:
这篇文章完整梳理了在.NET 8中集成阿里云信息服务的流程,从账号准备、SDK集成,到服务封装、控制器创建,再到测试优化和安全注意事项,基本上覆盖了开发中的关键环节。
跟着步骤走一遍,应该就能在自己的项目中快速实现信息发送功能,为应用增加信息验证和通知能力。当然,生产环境里还需要根据实际业务做更多打磨,比如高并发下的限流策略、多区域部署等,但核心链路已经清楚了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8