You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET API中接收短信?ASP.NET Web API实现问询

Hey,要在ASP.NET Web API里获取发送到你号码的短信内容,核心思路是借助第三方短信服务提供商的Webhook推送——毕竟运营商不会直接把短信推给你的自定义API。我给你拆解下具体步骤,附代码示例:

1. 选择支持Webhook的短信服务商

你需要找一家提供短信接收+Webhook推送的服务商,比如Twilio、Plivo、Vonage(原Nexmo)这类。他们会给你分配一个虚拟接收号码,部分服务商还支持绑定你的真实手机号。当有短信发送到这个号码时,服务商会自动把短信的相关信息(发送方号码、接收号码、短信内容等)POST到你指定的API接口。

2. 编写ASP.NET Web API的短信接收端点

创建一个API控制器,专门处理服务商发来的短信推送请求。下面是一个基础示例(以Twilio的参数格式为例,其他服务商参数名可能略有不同,需要调整):

using System.Web.Http;

public class SmsController : ApiController
{
    // 定义接收路由,确保服务商能访问到这个地址
    [HttpPost]
    [Route("api/sms/receive")]
    public IHttpActionResult ReceiveIncomingSms([FromForm] SmsPayload payload)
    {
        // 提取关键信息
        string senderNumber = payload.From;
        string yourReceivingNumber = payload.To;
        string smsContent = payload.Body;

        // 这里可以添加你的业务逻辑:比如存数据库、触发通知、调用其他服务等
        // Example: _smsRepository.Save(new ReceivedSms(senderNumber, yourReceivingNumber, smsContent));

        // 给服务商返回成功响应,部分服务商要求特定格式(比如Twilio可以返回空200,或XML指令)
        return Ok();
    }
}

// 对应服务商的请求参数模型,根据实际服务商调整字段名
public class SmsPayload
{
    public string From { get; set; } // 发送短信的用户号码
    public string To { get; set; } // 你的接收号码
    public string Body { get; set; } // 短信内容
}

3. 配置服务商的Webhook地址

把你的API接口的公网可访问地址配置到服务商的后台。比如如果你的API部署在云服务器上,地址可能是https://your-domain.com/api/sms/receive;如果是本地开发测试,可以用ngrok这类工具把本地端口映射到公网(比如运行ngrok http 5000,拿到ngrok提供的https地址后拼接接口路径)。

配置完成后,服务商就会在有新短信时自动向这个地址发送POST请求。

4. 验证请求合法性(关键)

为了防止恶意请求,必须验证收到的请求确实来自你的短信服务商。以Twilio为例,可以用他们的官方SDK做签名验证:

using Twilio.Security;
using System.Linq;

// 在ReceiveIncomingSms方法开头添加验证逻辑
var request = Request;
string twilioAuthToken = "你的Twilio AuthToken"; // 从Twilio后台获取
var validator = new RequestValidator(twilioAuthToken);

// 读取请求中的表单数据和签名头
var formData = await request.Content.ReadAsFormDataAsync();
var signature = request.Headers.GetValues("X-Twilio-Signature").FirstOrDefault();

// 验证请求是否合法
bool isRequestValid = validator.Validate(
    request.RequestUri.AbsoluteUri,
    formData,
    signature
);

if (!isRequestValid)
{
    return Unauthorized(); // 非法请求直接返回401
}

其他服务商也有类似的验证机制,比如Plivo用X-Plivo-Signature头,你可以参考他们的官方文档实现验证。

注意事项

  • 不同服务商的请求参数格式可能不同:比如Plivo的短信内容字段叫Text,而不是Body,需要根据你选择的服务商调整模型字段。
  • 确保你的API是HTTPS的:大部分服务商要求Webhook地址必须是HTTPS,避免数据传输被窃取。
  • 本地测试用ngrok:本地开发环境没有公网IP,用ngrok可以快速把本地API暴露到公网,方便调试。

内容的提问来源于stack exchange,提问作者blue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:56:16