在C# (.NET)中发送短信:与SMS服务API的集成

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在C# (.NET)中发送短信:API集成完全指南



在现代世界中,短信通知仍然是联系用户最可靠的方式之一。在C# (.NET)生态系统中,有多种发送消息的方法——从直接的HTTP请求到使用专门的NuGet包。在本文中,我们将通过基于HttpClient的纯实现示例,讲解如何通过流行服务(Twilio、sms.ru、Smsc)配置短信发送,并介绍一个用于俄罗斯供应商的现成库。



方法选择:库还是纯HTTP?

在C#中发送短信有两种主要途径:

  • 使用官方SDK(例如,用于.NET的Twilio)——提供类型化接口、内置错误处理和文档。
  • 通过HttpClient直接使用REST API——完全控制请求,最小化依赖,能够与任何供应商合作。

第二种方法更适合教育目的和需要灵活性的项目。让我们详细探讨它。



通过HTTP API发送短信的基本实现

让我们创建一个类SmsService,它将通过sms.ru(或任何其他格式类似的服务)的API发送消息。



using System;using System.Net.Http;using System.Threading.Tasks;

public class SmsService{ private readonly HttpClient _httpClient; private readonly string _apiKey;

public SmsService(string apiKey) { _httpClient = new HttpClient(); _apiKey = apiKey; }

public async Task<string> SendSmsAsync(string phone, string message) { var url = $"https://sms.ru/sms/send?api_id={_apiKey}&to={phone}&msg={Uri.EscapeDataString(message)}&json=1"; var response = await _httpClient.GetAsync(url); return await response.Content.ReadAsStringAsync(); }}


使用方式:

var sms = new SmsService("您的_API_密钥");string result = await sms.SendSmsAsync("+79123456789", "你好!这是一条测试消息。");Console.WriteLine(result);


优化:异步和错误处理

在实际项目中,需要添加号码验证、失败重试和日志记录。改进版本:



public async Task<SmsResult> SendSmsAsync(string phone, string message){    try    {        if (string.IsNullOrWhiteSpace(phone) || phone.Length < 10)            return new SmsResult { Success = false, Error = "号码格式无效" };

var url = $"https://sms.ru/sms/send?api_id={_apiKey}&to={phone}&msg={Uri.EscapeDataString(message)}&json=1"; var response = await _httpClient.GetAsync(url); var json = await response.Content.ReadAsStringAsync();

// 解析JSON(可以使用System.Text.Json) var result = JsonSerializer.Deserialize<SmsApiResponse>(json); return new SmsResult { Success = result?.Status == "OK", Response = json }; } catch (HttpRequestException ex) { return new SmsResult { Success = false, Error = $"网络错误:{ex.Message}" }; }}


为了解析响应,创建一个简单的模型:

public class SmsApiResponse{    public string Status { get; set; }    public int Balance { get; set; }}


现成库:用于.NET的Twilio

如果您需要生产就绪的解决方案,请使用Twilio SDK(NuGet:Twilio)。示例:



using Twilio;using Twilio.Rest.Api.V2010.Account;

TwilioClient.Init("ACCOUNT_SID", "AUTH_TOKEN");

var message = MessageResource.Create( body: "来自C#的问候!", from: new PhoneNumber("+1234567890"), to: new PhoneNumber("+79123456789"));

Console.WriteL

推荐