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

ASP.NET Core 7.0中Twilio SMS双因素认证通知失效问题

解决Twilio双因素认证中“To号码无效”的问题

错误信息

ApiException: The 'To' number 512####### is not a valid phone number.

已尝试的格式

  • +1 512 ### ####
  • 1512#######
  • (512) ### ####

解决方案

1. 严格使用E.164号码格式

Twilio要求接收号码必须遵循E.164标准格式:+[国家代码][无分隔符的纯数字号码],不能包含空格、括号、短横线等字符。以美国号码为例,正确格式应为+1512XXXXXXX(替换#为实际数字)。

2. 验证并格式化传入的号码

检查user.PhoneNumber的存储格式,确保没有多余字符。可以在发送短信前统一格式化号码:

public async Task SendSMSAsync(string toPhone, string message)
{
    // 清理号码中的非数字字符
    var cleanedPhone = new string(toPhone.Where(char.IsDigit).ToArray());
    // 添加国家代码(美国为+1,其他国家替换对应代码)
    var formattedPhone = cleanedPhone.StartsWith("+") ? cleanedPhone : $"+1{cleanedPhone}";

    TwilioClient.Init(_twilioSettings.AccountSID, _twilioSettings.AuthToken);
    await MessageResource.CreateAsync(
        to: formattedPhone,
        from: _twilioSettings.FromPhone,
        body: message
    );
}

如果需要适配多国家号码,可使用Twilio SDK中的PhoneNumber类自动解析格式:

var formattedPhone = new Twilio.Types.PhoneNumber(toPhone).ToString();

3. 确认试用账户的号码权限

Twilio试用账户仅能向已验证的接收号码发送短信。需登录Twilio控制台,将目标号码添加到「Verified Caller IDs」列表中,否则即使格式正确也会触发无效号码错误。

4. 检查发送方号码有效性

确保_twilioSettings.FromPhone是Twilio分配的官方试用号码,同样需符合E.164格式(如+1XXXXXXXXX),不能使用个人普通号码。

5. 调试确认实际传入号码

在SendSMSAsync方法中添加调试输出,确认传入的toPhone实际值是否符合预期,排除用户数据存储错误:

public async Task SendSMSAsync(string toPhone, string message)
{
    Console.WriteLine("实际传入号码:" + toPhone); // 调试用
    // 后续格式化及发送逻辑...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:52:24