这是成功击中的控制器路由:
[Route("begin")]
public ActionResult BeginSmsMessaging(SmsRequest message)
{
string from = message.From;
var phoneNumber = from.Replace("+1", "").FormatPhoneNumber();
_commandPipeline.Publish(new LogInboundMessage
{
PhoneNumber = phoneNumber,
TimestampUtc = DateTime.UtcNow
});
int code;
if(int.TryParse(message.Body, out code))
{
try
{
return RedirectToAction("DiaryQuestions");
}
catch(Exception e)
{
string error = e.Message;
return null;
}
}
else
{
return RedirectToAction("UnknownCode");
}
}
redirecttoAction("日记questions"(和重定向操作("未知代码"(都没有成功地重定向。取而代之的是,执行移至当前启动操作的末尾,然后滑入释放控制器的IOC代码,然后程序执行只是停止。
这是无法到达的日记Questions动作:
[Route("diaryQuestions")]
public ActionResult DiaryQuestions(SmsRequest message)
{
var response = new TwilioResponse();
response.SetAttributeValue("PhoneNumber", message.From);
response.SetAttributeValue("DiaryQuestion", "1");
response.Message("This is a test message.");
response.Sms("This is a test SMS");
return TwiML(response);
}
和无法实现的未知代码动作:
[Route("unknownCode")]
public ActionResult UnknownCode(SmsRequest message)
{
var response = new TwilioResponse();
response.Sms("What to say...");
return TwiML(response);
}
在控制台或Windows Event Viewer中都没有错误。另外,一切看起来都不错,直到重定向呼叫 - 输入参数和变量都正确填充。
我目前不知道会发生什么。:(
twilio开发人员在这里。
我相信安迪可能在他的评论中是正确的。因为您正在返回重定向,所以这将向Twilio发送301回复。我无法轻易找到有关Twilio是否遵循这些重定向的文档,但是在这种情况下,我认为不是。
我会将代码从您的两个额外操作diaryQuestions
和unknownCode
移动到原始操作,然后直接从那里返回Twiml。
类似:
[Route("begin")]
public ActionResult BeginSmsMessaging(SmsRequest message)
{
string from = message.From;
var phoneNumber = from.Replace("+1", "").FormatPhoneNumber();
_commandPipeline.Publish(new LogInboundMessage
{
PhoneNumber = phoneNumber,
TimestampUtc = DateTime.UtcNow
});
var response = new TwilioResponse();
int code;
if(int.TryParse(message.Body, out code))
{
try
{
response.SetAttributeValue("PhoneNumber", message.From);
response.SetAttributeValue("DiaryQuestion", "1");
response.Message("This is a test message.");
response.Sms("This is a test SMS");
}
catch(Exception e)
{
string error = e.Message;
return null;
}
}
else
{
response.Sms("What to say...");
}
return TwiML(response);
}