使用C#通过Azure通信服务发送多收件人短信报错求助
解决Azure通信服务多收件人短信发送的类型转换错误
问题根源
Azure通信服务的SmsClient.Send方法存在多个重载:
- 单收件人场景的重载返回
SmsSendResult - 多收件人场景(接收
string[]类型的to参数)的重载返回IEnumerable<SmsSendResult>,并非List<SmsSendResult>
你直接使用(List<SmsSendResult>)强制转换返回值,会触发类型转换错误——因为IEnumerable接口实例无法直接强制转为List类型。
修正后的代码
有两种可行的修正方式,根据你的业务需求选择:
方式1:用IEnumerable接收结果
如果不需要List专属的操作方法,直接用接口类型接收即可:
IEnumerable<SmsSendResult> sendResults = smsClient.Send( from: sms.From, to: sms.To, message: sms.Body, options: new SmsSendOptions(enableDeliveryReport: true) );
方式2:转为List类型
如果需要使用List的操作(比如索引访问、Add/Remove等),调用ToList()方法转换结果:
List<SmsSendResult> sendResults = smsClient.Send( from: sms.From, to: sms.To, message: sms.Body, options: new SmsSendOptions(enableDeliveryReport: true) ).ToList();
额外提示
- 确保
sms.To数组中的每个号码符合ACS格式要求(需包含国家/地区代码,例如+1425XXXXXXX) - 可以遍历结果逐个校验短信发送状态:
foreach (var result in sendResults) { if (result.Successful) { // 处理发送成功逻辑 } else { // 处理发送失败逻辑,可通过result.ErrorMessage查看错误详情 } }
内容的提问来源于stack exchange,提问作者Muthukani K
相关产品推荐
相关产品推荐

