2016-05-31 8 views
2

Der alte Code, den ich für Twilio geerbt habe, ruft Nachrichten mit der absoluten PageNumber-Eigenschaft von MessageListRequest ab, aber gemäß der Dokumentation ist dies veraltet, und ich sollte GetNextPage und GetPrevPage verwenden.Beispiele für getnextpage Verwendung in der Twilio API für C#?

Die API-Metadaten zeigen dies als veraltet mit der Nachricht "Verwenden Sie GetNextPage und GetPreviousPage für Paging. Seitenparameter ist für das Ende des Lebens https://www.twilio.com/engineering/2015/04/16/replacing-absolute-paging-with-relative-paging geplant".

Gibt es Beispiele für diese Verwendung? Ich konnte keine in der Dokumentation finden, außer in einer der API-Testmethoden und ich bin mir nicht sicher, wie gut ich mehrere Seiten mit diesem Beispiel als Leitfaden bearbeiten kann.

public class Foo : TwilioBase 
{ 
    public string Bar { get; set; } 
} 

public class FooResult : TwilioListBase 
{ 
    public List<Foo> Foos { get; set; } 
} 
[Test] 
public void ShouldGetNextPage() 
{ 
    IRestRequest savedRequest = null; 

    FooResult firstPage = new FooResult(); 
    firstPage.NextPageUri = new Uri("/Foos?PageToken=abc123", UriKind.Relative); 

    mockClient.Setup(trc => trc.Execute<FooResult>(It.IsAny<IRestRequest>())) 
     .Callback<IRestRequest>((request) => savedRequest = request) 
     .Returns(new FooResult()); 
    var client = mockClient.Object; 

    var response = client.GetNextPage<FooResult>(firstPage); 

    mockClient.Verify(trc => trc.Execute<FooResult>(It.IsAny<IRestRequest>()), Times.Once); 
    Assert.IsNotNull(savedRequest); 
    Assert.AreEqual("/Foos?PageToken=abc123", savedRequest.Resource); 
    Assert.AreEqual(Method.GET, savedRequest.Method); 

    Assert.IsNotNull(response); 
} 

Die alte Nutzung könnte so etwas wie so aussehen:

var twilio = new TwilioRestClient(config.AccountSid, config.AuthToken); 
var result = new List<Message>(); 
MessageResult tempResult; 
int page = 0; 
do 
{ 
    var request = new MessageListRequest(); 
    request = new MessageListRequest { Count = 1000, DateSent = newestDate, DateSentComparison = ComparisonType.GreaterThanOrEqualTo, PageNumber = page++, To = config.FromNumber }; 

    tempResult = twilio.ListMessages(request); 
    result.AddRange(tempResult.Messages); 
} while (tempResult.NextPageUri != null); 

Schließlich baute ich die Twilio API 3.4.1.0 vom twilio-csharp GitHub project statt NuGet da ich sie aktualisieren müssen, um die MessagingServiceSid zu verwenden, die ist noch nicht in der API enthalten.

Danke für alle Hinweise. Ich werde eine Lösung veröffentlichen, wenn ich es selbst herausfinden kann.

Antwort

5

Eigentlich habe ich es jetzt zu arbeiten!

MessageResult messages = twilio.ListMessages(request); 
do 
{ 
    if (messages.Messages != null) 
    { 
     foreach (var message in messages.Messages) 
     { 
      ... process results   
     } 
     if (messages.NextPageUri != null) 
     { 
      messages = twilio.GetNextPage<MessageResult>(messages); 
     } 
    } 
} while (messages.NextPageUri != null); 
+0

Werden Sie dadurch nicht die letzte Ergebnisseite verpassen? Wenn Sie die letzte Seite drücken, rufen Sie messages = twillio.GetNextPage auf, aber dann drücken Sie sofort die "while" -Klausel. messages.NextPageUri hat nicht mehr den gleichen Wert wie beim if. –

0

Haben Sie das Beispiel aus dem API Explorer versucht? https://www.twilio.com/console/dev-tools/api-explorer/sms/sms-mms-list

var twilio = new TwilioRestClient(AccountSid, AuthToken); 

// Build the parameters 
var options = new MessageListRequest();  

var messages = twilio.ListMessages(options); 
foreach (var message in messages.Messages) 
{ 
Console.WriteLine(message.Body); 
} 

Die helper library wird automatisch von der API holen, wie Sie eine Schleife über die Liste, bis alle Datensätze mit Ihren Kriterien übereinstimmen verarbeitet werden.

Sie können die Ergebnisse mit MessageListRequest begrenzen.

Bitte geben Sie einen Versuch und lassen Sie mich wissen, wie es geht.

+0

Das gibt nur eine einzelne Seite zurück, die eine maximale Größe von 1000 Datensätzen hat. Ich muss alle Ergebnisse abrufen. Ich verwende die jetzt veraltete MessageListRequest-Meldung, um die Ergebnisse zu durchsuchen, bis sie alle abgerufen wurden. –

+0

^^ Dies ist nicht wahr, Paging muss verwendet werden. –

Verwandte Themen