【问题标题】:Any examples of getnextpage usage in the twilio api for c#?c# 的 twilio api 中 getnextpage 用法的任何示例?
【发布时间】: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。

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

【问题讨论】:

    标签: c# twilio


    【解决方案1】:

    实际上,我现在可以使用它了!

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

    【讨论】:

    • 这不会导致您错过最后一页结果吗?当您点击最后一页时,您调用messages = twilio.GetNextPage,但随后立即点击“while”子句。 messages.NextPageUri 不再具有与单击 if 时相同的值。
    【解决方案2】:

    您是否尝试过 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 限制结果。

    请试一试,告诉我进展如何。

    【讨论】:

    • 只返回一个页面,最大大小为 1000 条记录。我需要检索所有结果。我正在使用现已过时的 PageNumber MessageListRequest 对结果进行分页,直到全部检索到。
    • ^^ 这不是真的,必须使用分页。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多