如何使用 .NET Core MVC 框架将 TwiML 实现为一种方法?
How do you implement TwiML as a method using the .NET Core MVC Framework?
我正在执行基于 Twilio 示例的代码,用于接收和响应在此处找到的 SMS 消息:
https://www.twilio.com/docs/sms/tutorials/how-to-receive-and-reply-csharp
唯一的区别是我使用的是 .NET MVC Core 而 而不是 .NET MVC Framework 如示例中所提供的。我遇到问题的代码是:
[HttpPost]
public TwiMLResult Index(SmsRequest incomingrequest)
{
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The Robots are coming! Head for the Hills!");
return TwiML(messagingResponse);
}
如果我将方法封装在 Controller 的 Class 中,它默认继承自 ControllerBase class; TwiML 被识别为基础 class 而不是导致错误的方法。
public class SmsResponseController : ControllerBase
{
[HttpPost]
public TwiMLResult Index(SmsRequest incomingrequest)
{
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The Robots are coming! Head for the Hills!");
return TwiML(messagingResponse); -- <-- Error: Non-invokable member TwiML cannot be used like a method
}
}
因此明确遵循示例,将继承从 ControllerBase 更改为 TwilioController 将解决此特定问题,并且 TwilML 被识别为具有 3 个潜在重载的方法。
public class SmsResponseController : TwilioController
{
[HttpPost]
public TwiMLResult Index(SmsRequest incomingrequest)
{
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The Robots are coming! Head for the Hills!");
return TwiML(messagingResponse); -- Method recognized
}
}
但是尝试执行程序现在会在 Program.cs 中的主执行期间抛出错误
错误是
System.TypeLoadException:“无法从程序集 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 加载类型 'System.Web.HttpContextBase'。”
不幸的是,到目前为止我发现的帖子似乎都不适用于这种情况,也没有解决问题。
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
我只能猜测核心框架中某处的部分代码依赖于 ControllerBase 的存在 class。
但是我怎样才能让示例在没有错误且不依赖于 ControllerBase 的情况下执行?
现在似乎是第 22 条军规。
还有另一个包可以用于 ASP.NET 核心:
https://www.nuget.org/packages/Twilio.AspNet.Core/
那么,您想要的代码应该是这样的:
using Twilio.AspNet.Common;
using Twilio.AspNet.Core;
using Twilio.TwiML;
namespace TwilioReceive.Controllers
{
public class SmsController : TwilioController
{
public TwiMLResult Index(SmsRequest incomingMessage)
{
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The copy cat says: " +
incomingMessage.Body);
return TwiML(messagingResponse);
}
}
}
更多关于使用.NET Core的文档,你可以查看这个文档:
https://www.twilio.com/docs/sms/quickstart/csharp-dotnet-core
我正在执行基于 Twilio 示例的代码,用于接收和响应在此处找到的 SMS 消息: https://www.twilio.com/docs/sms/tutorials/how-to-receive-and-reply-csharp
唯一的区别是我使用的是 .NET MVC Core 而 而不是 .NET MVC Framework 如示例中所提供的。我遇到问题的代码是:
[HttpPost]
public TwiMLResult Index(SmsRequest incomingrequest)
{
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The Robots are coming! Head for the Hills!");
return TwiML(messagingResponse);
}
如果我将方法封装在 Controller 的 Class 中,它默认继承自 ControllerBase class; TwiML 被识别为基础 class 而不是导致错误的方法。
public class SmsResponseController : ControllerBase
{
[HttpPost]
public TwiMLResult Index(SmsRequest incomingrequest)
{
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The Robots are coming! Head for the Hills!");
return TwiML(messagingResponse); -- <-- Error: Non-invokable member TwiML cannot be used like a method
}
}
因此明确遵循示例,将继承从 ControllerBase 更改为 TwilioController 将解决此特定问题,并且 TwilML 被识别为具有 3 个潜在重载的方法。
public class SmsResponseController : TwilioController
{
[HttpPost]
public TwiMLResult Index(SmsRequest incomingrequest)
{
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The Robots are coming! Head for the Hills!");
return TwiML(messagingResponse); -- Method recognized
}
}
但是尝试执行程序现在会在 Program.cs 中的主执行期间抛出错误 错误是
System.TypeLoadException:“无法从程序集 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 加载类型 'System.Web.HttpContextBase'。”
不幸的是,到目前为止我发现的帖子似乎都不适用于这种情况,也没有解决问题。
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
我只能猜测核心框架中某处的部分代码依赖于 ControllerBase 的存在 class。
但是我怎样才能让示例在没有错误且不依赖于 ControllerBase 的情况下执行?
现在似乎是第 22 条军规。
还有另一个包可以用于 ASP.NET 核心: https://www.nuget.org/packages/Twilio.AspNet.Core/
那么,您想要的代码应该是这样的:
using Twilio.AspNet.Common;
using Twilio.AspNet.Core;
using Twilio.TwiML;
namespace TwilioReceive.Controllers
{
public class SmsController : TwilioController
{
public TwiMLResult Index(SmsRequest incomingMessage)
{
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The copy cat says: " +
incomingMessage.Body);
return TwiML(messagingResponse);
}
}
}
更多关于使用.NET Core的文档,你可以查看这个文档: https://www.twilio.com/docs/sms/quickstart/csharp-dotnet-core