2017-07-14 2 views
0

Aus Gründen der Kürze halber habe ich einen Endpunkt, die in einigen Parametern nimmt und gibt eine TwiML Antwort den Anruf an einen anderen Endpunkt zu umleiten ein DTMF-Antwort des Benutzers zu sammeln:URL-safe Aktionen in Twilio TwiML Antworten

[HttpGet] 
public async MyEndpoint<ActionResult> Test(string parameterOne, string parameterTwo) 
{ 
    var response = new VoiceResponse() 
     .Redirect(
      url: $"https://example.com/Gather?parameterOne={parameterOne}&parameterTwo={parameterTwo}", 
      method: "POST"); 

    return TwiML(response); 
} 

, das die folgenden XML erzeugt:

<?xml version="1.0" encoding="utf-8"?> 
<Response> 
    <Redirect method="POST">https://example.com/Gather?paramaterOne="test"&amp;parameterTwo="test"</Redirect> 
</Response> 

die Idee ist, dass Twilio zu diesem Endpunkt Standard-Request-Objekt ist es schreiben soll, aber ist meine Parameter im Query-String:

[HttpPost] 
public async Task<ActionResult> Gather([FromUri] string parameterOne, string parameterTwo [FromBody] TwilioCallbackRequest request) 
{ 
    // Do stuff 
} 

Die Anforderung schlägt jedoch fehl, da der XML-codierte &amp; vom Webserver nicht als Abfragezeichenfolgen-Delimeter interpretiert wird.

Idealerweise gibt es eine Möglichkeit, die Formularwerte der Twilio-Anfrage so zu ändern, dass sie die Parameter enthält, die ich übergeben muss, aber ich glaube nicht, dass diese Funktion existiert.

Meine Fragen sind:

A. Gibt es eine Möglichkeit Twilio zu bekommen encodieren URL von Abfragen ist ?, oder

B. Was ist der beste Weg, um eine Abfrage-String zu akzeptieren, die in dieser ungültig ist Weise in ASP.NET ohne Fehler, bevor ich eine Chance habe, die Anfrage zu bearbeiten?

Derzeit ist meine hacky Problemumgehung, meine Abfrage-String-Parameter als eine große Zeichenfolge mit Unterstrich-Trennzeichen zu senden und meine Parameter manuell zu analysieren, aber ich bezweifle, dass dies der beste Weg ist. Ich habe auch erwogen, Anfragen mit OWIN-Middleware abzufangen und zu versuchen, die Abfragezeichenfolge für diesen Endpunkt zu ändern.

Antwort

1

Twilio Dev Evangelist hier ...

Es sieht aus wie Sie verwenden sowohl die Twilio und Twilio.AspNet.Mvc Pakete Ihre Antwort zurückzukehren. Sie können Ihr Ziel auch erreichen, indem Sie die Antwort für Ihre Get-Methode vorbereiten, ohne das Twilio.AspNet.Mvc-Paket zu verwenden. Hier ist ein Beispiel:

[HttpGet] 
public HttpResponseMessage Get(string parameterOne, string parameterTwo) 
{ 
    var response = new VoiceResponse() 
     .Redirect(
      url: $"https://example.com/Gather?paramaterOne={parameterOne}&parameterTwo={parameterTwo}", 
     method: "POST"); 
    var content = new StringContent(response.ToString(), Encoding.UTF8, "application/xml"); 
    return new HttpResponseMessage 
    { 
     Content = content, 
     StatusCode = HttpStatusCode.OK 
    }; 
} 

Versuchen Sie dies und lassen Sie mich wissen, wenn Sie auf Probleme stoßen.

+0

Danke für die Anregung, aber dies gibt die folgenden: 'Statuscode: 200, ReasonPhrase: 'OK', Version: 1.1, Inhalt: System.Net.Http.StringContent, Sockel: { Content-Type: Anwendung/xml; charset = utf-8 } ' was Twilio nicht mag (12100 Document Parse Fehler) –

+0

Sehr interessant, dass Sie diese Antwort bekommen. Würde es Ihnen etwas ausmachen, den genauen Code, den Sie für beide Methoden verwenden, zu posten (oder mir eine E-Mail an [email protected] zu schicken)? Basierend auf der obigen Antwort vermute ich, dass der Inhalt der Zeichenfolge nicht tatsächlich gesendet wird. –

+0

Sie haben Recht! Ich hatte MVC und WebAPI Bindungen für die gleichen Routen kämpfen. Es ist jedoch zu beachten, dass der Twilio XML-Generator (der 'TwiML'-Konstruktor) wahrscheinlich nicht mit den kaufmännischen Und-Zeichen (engl.) Zu tun haben sollte, wenn er XML zurückgibt. –

Verwandte Themen