2017-04-20 1 views
0

Hier ist die Controller-Route, die erfolgreich getroffen wird:RedirectToAction gibt die aktuelle Aktion zu beenden und geht nirgendwo

[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"); 
     } 
    } 

Weder die RedirectToAction („DiaryQuestions“) noch die RedirectToAction („Unbekannte“) wird erfolgreich Umleiten . Stattdessen wird die Ausführung an das Ende der aktuellen BeginSmsMessaging-Aktion verschoben und dann in den IoC-Code verschoben, in dem der Controller freigegeben wird und die Ausführung des Programms gestoppt wird.

Hier ist die unerreichbare DiaryQuestions Aktion:

[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); 
    } 

Und das nicht erreichbar Unbekannte Aktion:

[Route("unknownCode")] 
    public ActionResult UnknownCode(SmsRequest message) 
    { 
     var response = new TwilioResponse(); 

     response.Sms("What to say..."); 

     return TwiML(response); 
    } 

keine Fehler entweder in der Konsole oder Windows-Ereignisanzeige geworfen werden. Außerdem sieht alles bis zum Aufruf von RedirectToAction gut aus - Eingabeparameter und Variablen sind alle korrekt ausgefüllt.

Ich habe keine Ahnung an diesem Punkt, was passieren könnte. :(

+0

Können Sie den Code debuggen und sehen, welchen Pfad er nimmt? Ich bin mir nicht sicher, wie es keinen Wert zurückgeben könnte. – Andy

+0

Das Verhalten, das ich beschrieben habe, ist genau das, was passiert, wenn ich den Code durchtrete. Um genauer zu sein, nachdem es eine der RedirectToAction-Zeilen erreicht hat, bewegt es sich dann zur Endstrebe der aktuellen Aktion und bewegt sich dann direkt in Castle Windsor-Code, wo der Controller freigegeben wird und die Ausführung stoppt. – SomeDevTesting123

+0

Entschuldigung, ich habe es nicht richtig gelesen. Ich könnte sehr gut falsch liegen, aber ich denke nicht, dass dies ein Twilio-Problem ist, sondern eher ein Problem mit .net mvc. Ich denke, was passiert, wenn Sie RedirectToAction aufrufen, es bewirkt, dass der Browser eine 301-Weiterleitung ausführt, die den aktuellen Ausführungspfad beenden würde. Mein .net mvc-Wissen ist jedoch begrenzt, also könnte ich mich irren – Andy

Antwort

1

Twilio Entwickler Evangelist hier.

Ich glaube, Andy wahrscheinlich Recht in seinen Kommentaren ist. Da Sie eine Umleitung zurückkommen, das eine 301-Antwort auf Twilio senden. Ich nicht leicht Dokumentation finden können, ob Twilio folgt diese Umleitungen, aber ich in diesem Fall davon ausgehen würde, dass es nicht ist.

ich würde den Code von Ihren zwei zusätzlichen Aktionen bewegen, diaryQuestions und unknownCode, auf die ursprüngliche Aktion und gebe die TwiML gerade von dort.

Etwas wie:

[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); 
    } 

Lassen Sie mich wissen, ob das überhaupt hilft.

Verwandte Themen