Я выполняю код на основе примера 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, который по умолчанию наследуется от класса ControllerBase; TwiML идентифицируется как базовый класс, а не как метод, вызывающий ошибку.
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 решит эту конкретную проблему c и 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 Ошибка:
Система .TypeLoadException: «Не удалось загрузить тип» System.Web.HttpContextBase 'из сборки' System.Web, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a '.'
и, к сожалению, не из постов, которые я нашел до сих пор, похоже, что они применимы к этому сценарию и не решают проблему.
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.
Но как я могу получить образец для выполнения без ошибок и де Зависит от ControllerBase?
Кажется прямо сейчас сценарий уловки 22.