.NET 8集成阿里云短信服務完全指南【短信接口】

文章目錄

  • 前言
  • 一、準備工作
    • 1.1 阿里云賬號準備
    • 1.2 .NET 8項目創建
  • 二、集成阿里云短信SDK
    • 2.1 安裝NuGet包
    • 2.2 配置阿里云短信參數
    • 2.3 創建配置類
  • 三、實現短信發送服務
    • 3.1 創建短信服務接口
    • 3.2 實現短信服務
    • 3.3 注冊服務
  • 四、創建控制器
  • 五、測試與優化
    • 5.1 單元測試
    • 5.2 性能優化建議
  • 六、安全注意事項
  • 七、總結


在這里插入圖片描述

前言

在當今的互聯網應用中,短信驗證碼、通知等功能已成為必不可少的部分。阿里云短信服務(SMS)作為國內領先的短信平臺,提供了穩定可靠的短信發送能力。本文將詳細介紹如何在.NET 8應用中集成阿里云短信服務,實現短信發送功能。

一、準備工作

1.1 阿里云賬號準備

  1. 注冊阿里云賬號并完成實名認證
  2. 開通短信服務(SMS)
  3. 申請短信簽名和模板(需企業資質)
  4. 獲取 AccessKey IDAccessKey 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<bool> SendVerificationCodeAsync(string phoneNumber, string code);
}

3.2 實現短信服務

public class AliyunSmsService : ISmsService
{private readonly AliyunSmsSettings _settings;private readonly ILogger<AliyunSmsService> _logger;public AliyunSmsService(IOptions<AliyunSmsSettings> settings, ILogger<AliyunSmsService> logger){_settings = settings.Value;_logger = logger;}public async Task<bool> 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<AliyunSmsSettings>(builder.Configuration.GetSection("AliyunSms"));
builder.Services.AddTransient<ISmsService, AliyunSmsService>();

四、創建控制器

[ApiController]
[Route("api/[controller]")]
public class SmsController : ControllerBase
{private readonly ISmsService _smsService;private readonly ILogger<SmsController> _logger;public SmsController(ISmsService smsService, ILogger<SmsController> logger){_smsService = smsService;_logger = logger;}[HttpPost("send-verification-code")]public async Task<IActionResult> 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()
{// Arrangevar mockSmsService = new Mock<ISmsService>();mockSmsService.Setup(x => x.SendVerificationCodeAsync(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(true);var controller = new SmsController(mockSmsService.Object, Mock.Of<ILogger<SmsController>>());var request = new SendVerificationCodeRequest { PhoneNumber = "13800138000" };// Actvar result = await controller.SendVerificationCode(request);// Assertvar okResult = Assert.IsType<OkObjectResult>(result);var response = Assert.IsType<dynamic>(okResult.Value);Assert.True(response.Success);
}

5.2 性能優化建議

  1. 使用 HttpClient 池化技術
  2. 實現短信發送限流,防止短時間內發送過多短信
  3. 使用緩存存儲驗證碼,避免重復生成
  4. 實現異步發送隊列,提高系統響應速度

六、安全注意事項

  1. 不要將 AccessKey硬編碼在代碼中,使用安全的方式存儲
  2. 實現短信發送頻率限制,防止短信轟炸
  3. 驗證碼應該有有效期(通常5-10分鐘)
  4. 對手機號進行格式驗證和黑名單檢查
  5. 敏感操作日志記錄

七、總結

本文詳細介紹了在.NET 8應用中集成阿里云短信服務的完整流程,包括:

  1. 阿里云短信服務的申請和配置
  2. .NET項目中SDK的集成
  3. 短信服務的封裝實現
  4. 控制器的創建和測試
  5. 性能優化和安全注意事項

通過本文的指導,開發者可以快速在自己的.NET 8應用中實現短信發送功能,為應用增加短信驗證、通知等能力。

參考:阿里云短信服務官方文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84284.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84284.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84284.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決HuggingFace不能git clone的問題

今天在從HuggingFace上clone項目的時候&#xff0c;一直出現超時問題&#xff0c;查了很多資料沒有解決&#xff0c;后來向mentor請教了一下&#xff0c;可以通過鏡像的方法解決這個問題&#xff0c;所以把方法放上來&#xff0c;希望對大家有幫助。 HuggingFace的服務器在國外…

Zookeeper 集群部署與故障轉移

Zookeeper 介紹 Zookeeper 是一個開源的分布式協調服務&#xff0c;由Apache基金會維護&#xff0c;專為分布式應用提供高可用、強一致性的核心基礎能力。它通過簡單的樹形命名空間&#xff08;稱為ZNode樹&#xff09;存儲數據節點&#xff08;ZNode&#xff09;&#xff0c;…

簡單聊下阿里云DNS劫持事件

阿里云域名被DNS劫持事件 事件總結 根據ICANN規則&#xff0c;域名注冊商&#xff08;Verisign&#xff09;認定aliyuncs.com域名下的部分網站被用于非法活動&#xff08;如傳播惡意軟件&#xff09;&#xff1b;頂級域名DNS服務器將aliyuncs.com域名的DNS記錄統一解析到shado…

服務器出現故障怎么辦?快速排查與解決方法

服務器故障的常見原因分析 硬件故障&#xff1a;內存、硬盤、網絡設備故障。 軟件故障&#xff1a;操作系統、應用程序、數據庫異常。 網絡攻擊&#xff08;如DDoS攻擊&#xff09;造成資源耗盡。 快速排查故障的步驟 檢查監控系統報警日志。 查看系統資源使用情況&#x…

Claude vs ChatGPT vs Gemini:功能對比、使用體驗、適合人群

隨著AI應用全面進入生產力場景&#xff0c;市面上的主流AI對話工具也進入“三國殺”時代&#xff1a; Claude&#xff08;Anthropic&#xff09;&#xff1a;新銳崛起&#xff0c;語言邏輯驚艷&#xff0c;Opus 模型被稱為 GPT-4 殺手ChatGPT&#xff08;OpenAI&#xff09;&a…

Git 使用大全:從入門到精通

Git 是目前最流行的分布式版本控制系統&#xff0c;被廣泛應用于軟件開發中。本文將全面介紹 Git 的各種功能和使用方法&#xff0c;包含大量代碼示例和實踐建議。 文章目錄 Git 基礎概念版本控制系統Git 的特點Git 的三個區域Git 文件狀態 Git 安裝與配置安裝 GitLinuxmacOSWi…

SpringBoot 框架第 1 次接口調用慢

文章目錄 背景分析思路 1:DeepSeek 分析思路 2:日志分析思路 3:Arthas 分析下載 Arthas啟動 Arthastrace 調用耗時分析Controller 調用耗時Service 調用分析ServiceImpl 耗時分析IService 耗時分析BaseMapper 耗時分析debug 執行鏈路MyBatisMapperProxy 解讀解決思路 1:預熱…

數據分析Agent構建

數據分析agent構建 代碼資料來源于 Streamline-Analyst&#xff0c;旨在通過該倉庫上的代碼了解如何使用大語言模型構建數據分析工具&#xff1b; 個人倉庫&#xff1a;Data-Analysis-Agent-Tutorial 不同的在于 Data-Analysis-Agent-Tutorial 是在 Streamline-Analyst 基礎…

Java后端檢查空條件查詢

通過拋出運行異常&#xff1a;throw new RuntimeException("請輸入查詢條件&#xff01;");BranchWarehouseServiceImpl.java // 查詢試劑交易&#xff08;入庫/出庫&#xff09;記錄Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…

6??Go 語言中的哈希、加密與序列化:通往區塊鏈世界的鑰匙

Go 語言中的哈希、加密與序列化:通往區塊鏈世界的鑰匙 一、前言:離區塊鏈還有多遠? 區塊鏈聽起來可能遙不可及,似乎是只有密碼學專家和資深工程師才能涉足的領域。但事實上,構建一個區塊鏈的核心并不復雜,尤其當你已經掌握了一門系統編程語言,比如 Go。 要真正理解區…

python爬蟲——氣象數據爬取

一、導入庫與全局配置 python 運行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入數據解析、網絡請求、時間處理、數據庫操作等所需庫。requests&#xff1a;發送 …

Python爬蟲(三):BeautifulSoup庫

1. BeautifulSoup是什么&#xff1f; BeautifulSoup 是一個 Python 庫&#xff0c;專門用來解析 HTML 或 XML 文件&#xff0c;方便我們提取數據。它能把網頁源代碼轉換成樹形結構&#xff0c;讓我們可以輕松查找、修改內容&#xff0c;并自動處理編碼問題&#xff08;如 Unic…

AI電銷機器人智能的發展趨勢是什么?

AI電銷機器人智能的發展趨勢是什么&#xff1f;電銷機器人智能的發展前景怎么樣&#xff1f;隨著互聯網技術的不斷發展&#xff0c;AI電銷機器人智能已經成為了許多企業實現銷售數字化轉型的重要工具&#xff0c;我們一起來看看。 AI電銷機器人正突破傳統語音機械應答的邊界&a…

C++ 求圓面積的程序(Program to find area of a circle)

給定半徑r&#xff0c;求圓的面積。圓的面積應精確到小數點后5位。 例子&#xff1a; 輸入&#xff1a;r 5 輸出&#xff1a;78.53982 解釋&#xff1a;由于面積 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因為我們只保留小數點后 5 位數字。 輸…

C++_哈希表

本篇文章是對C學習的哈希表部分的學習分享 相信一定會對你有所幫助~ 那咱們廢話不多說&#xff0c;直接開始吧&#xff01; 一、基礎概念 1. 哈希核心思想&#xff1a; 哈希函數的作用&#xff1a;通過此函數建立一個Key與存儲位置之間的映射關系。理想目標&#xff1a;實現…

Mac M芯片 RAG 極簡流程 安裝 ragflow + LM studio

本文基于 【【知識科普】【純本地化搭建】【不本地也行】DeepSeek RAGFlow 構建個人知識庫】 https://www.bilibili.com/video/BV1WiP2ezE5a/?share_sourcecopy_web&vd_source9a55f12dd64d8e30ab6c0efc62844343 1 .docker-compose yml文件修改,指定平臺 platform: linux/…

Rsync+inotify+nfs實現數據實時備份方案

技術棧 NFS是 Network File System的簡寫&#xff0c;即網絡文件系統。NFS的優點是內核直接支持&#xff0c;部署簡單、運行穩定&#xff0c;協議簡單、傳輸效率高。缺點是僅依靠IP地址或主機名來決定用戶能否掛載共享目錄&#xff0c;容易出現單點故障。 rsync是linux系統下的…

Vue ⑥-路由

單頁應用程序 單頁應用程序&#xff0c;即 Single-Page Application&#xff0c;簡稱 SPA&#xff0c;是一種使用 JavaScript、HTML 和 CSS 構建的 Web 應用程序。SPA 的核心是前端路由&#xff0c;它使得用戶在訪問網站時&#xff0c;只需加載一次頁面&#xff0c;然后通過前…

Hadoop復習(九)

Azkaban工作流管理器 選擇 問題 1 判斷題 2 / 2 分 工作流是指具有依賴的一組job任務&#xff0c;被依賴的job任務最后執行 正確 錯誤 問題 2 判斷題 2 / 2 分 Azkaban兼容任何版本的Hadoop 正確 錯誤 問題 3 判斷題 2 / 2 分 獨立服務器模式下&#xff0c;Azkab…

SpringMVC相關知識(二)

一.重定向和轉發 1.ModelandView 設置ModelAndView對象 , 根據view的名稱 , 和視圖解析器跳到指定的頁面 頁面 : {視圖解析器前綴} viewName {視圖解析器后綴} 相關代碼&#xff1a; <!-- 視圖解析器 --> <bean class"org.springframework.web.servlet.vi…