有关c#的twilio api中getnextpage用法的任何示例?

时间:2016-05-31 17:25:13

标签: c# twilio

我为Twilio继承的旧代码使用MessageListRequest的绝对PageNumber属性检索消息,但根据文档,这已经过时,我应该使用GetNextPage和GetPrevPage。

API元数据显示这已过时,消息"使用GetNextPage和GetPreviousPage进行分页。页面参数计划在生命周期结束时使用https://www.twilio.com/engineering/2015/04/16/replacing-absolute-paging-with-relative-paging"。

有这种用法的例子吗?除了API测试方法之外,我在文档中找不到任何内容,并且我不确定以此示例为指导我可以处理多个页面。

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

旧用法看起来像这样:

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

最后,我从twilio-csharp GitHub project而不是NuGet构建了Twilio API 3.4.1.0,因为我需要更新它以使用尚未包含在API中的MessagingServiceSid。

感谢您的任何指示。如果我能自己解决问题,我会发布一个解决方案。

2 个答案:

答案 0 :(得分:5)

实际上,我现在就开始工作了!

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

答案 1 :(得分:0)

您是否尝试过API Explorer中的示例? 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); 
} 

当您循环遍历列表时,helper library将自动从API中获取,直到处理完所有符合条件的记录。

您可以使用MessageListRequest限制结果。

请尝试一下,让我知道它是怎么回事。