ASP.NET Core 2方法返回TwiML报错:无法将TwiML当作方法调用
解决ASP.NET Core 2中Twilio返回TwiML的"Non-invocable member"错误
我刚帮你定位到这个问题的根源:你参考的旧代码示例大概率是基于早期版本的Twilio SDK,而当前你使用的Twilio.AspNet.Core包语法已经更新了——TwiML不再是一个可调用的方法,所以你直接把它当方法用才会报这个错误。
下面是两种适配ASP.NET Core 2环境的正确实现方式:
方式1:继承TwilioController(推荐)
Twilio提供了专门的TwilioController来简化TwiML的返回流程,只需要创建VoiceResponse对象,然后返回TwimlResult即可:
using Twilio.TwiML; using Twilio.AspNet.Core; public class CallForwardController : TwilioController { public IActionResult HandleIncomingCall() { // 创建语音响应对象 var voiceResponse = new VoiceResponse(); // 配置呼叫转接,替换成你的目标号码 voiceResponse.Dial("+18001234567"); // 返回TwimlResult return new TwimlResult(voiceResponse); } }
方式2:手动返回XML内容(不继承TwilioController)
如果你的控制器不需要继承TwilioController,可以直接将VoiceResponse序列化为XML字符串,指定正确的Content-Type返回:
using Twilio.TwiML; using Microsoft.AspNetCore.Mvc; public class CallController : Controller { public IActionResult ForwardCall() { var voiceResponse = new VoiceResponse(); voiceResponse.Dial("+18001234567"); // 直接返回XML格式的响应 return Content(voiceResponse.ToString(), "application/xml"); } }
额外注意事项
- 确保安装适配ASP.NET Core 2的NuGet包:由于ASP.NET Core 2版本较旧,你需要安装对应版本的
Twilio.AspNet.Core(推荐5.x系列,避免安装6.0+版本,因为这些版本适配.NET Core 3.1+)。可以通过NuGet包管理器执行:Install-Package Twilio.AspNet.Core -Version 5.61.0 - 验证Twilio Webhook配置:确保Twilio控制台中设置的Webhook URL指向你这个控制器的Action,并且请求方法选择
POST(Twilio默认用POST发送呼叫事件)。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

