我为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。
感谢您的任何指示。如果我能自己解决问题,我会发布一个解决方案。
答案 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限制结果。
请尝试一下,让我知道它是怎么回事。