【发布时间】:2016-09-29 20:10:37
【问题描述】:
我为 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。
感谢您的任何指点。如果我能自己解决,我会发布一个解决方案。
【问题讨论】: