重定向操作通过了当前行动的结束,无处可去



这是成功击中的控制器路由:

[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是否遵循这些重定向的文档,但是在这种情况下,我认为不是。

我会将代码从您的两个额外操作diaryQuestionsunknownCode移动到原始操作,然后直接从那里返回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);
    }

相关内容

最新更新