c# - Azure IoT 中心设备查询分页继续 token 不起作用

标签 c# azure azure-iot-hub

当尝试在连接到 Azure IoT 中心的设备的 .NET 6 中创建分页网站时,我发现无论我传递的页码 (pageNumber) 是什么,它总是返回前 10 个设备。我认为 continuationToken 的格式不正确或类似的情况,但没有发生错误。

registryManager = RegistryManager.CreateFromConnectionString("{iot hub connection string}")
int pageSize = 10;
var query = registryManager.CreateQuery("SELECT * FROM devices", pageSize);
var pageToken = "skip=" + pageNumber * pageSize + "&total=" + pageSize;
var continuationToken = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(pageToken));
var page = query.GetNextAsTwinAsync(new QueryOptions() { ContinuationToken = continuationToken });
var deviceList = page.Result.ToList();

最佳答案

我测试了您共享的代码,并注意到 continuationToken 似乎不会影响返回的结果集。这里使用代码生成的 continuationToken 是一个随机字符串,我认为它不包含 pageToken 的任何信息。我找到了一种不同的方法来达到相同的结果。

您可以利用.Net中IEnumerable的Skip和Take方法来实现分页。 query.GetNextAsTwinAsync().Result 提供 Twin 类型的 IEnumerable,您可以在其上应用 Skip 和 Take 方法来获取分页结果。

这是我实现的用于实现 Azure IoT 中心设备分页的代码

        registryManager = RegistryManager.CreateFromConnectionString(connString);
        int pageSize = 3;
        int pageNumber = 1;
        var query = registryManager.CreateQuery("SELECT * FROM devices");
        var page = query.GetNextAsTwinAsync().Result.Skip(pageNumber*pageSize).Take(pageSize);
        var deviceList = page.ToList();

关于c# - Azure IoT 中心设备查询分页继续 token 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73560219/

相关文章:

azure - 虚拟机中的 IoT Edge 离线功能

c# - 在 C# 中将字符串解析为 DateTime 对象

Azure 存储和 VNET?

azure - 如何开始使用 Microsoft 沉浸式阅读器 SDK?

Azure 功能 - 从 IoT 中心保存到表存储

c - 如何从设备将设备注册到azure iot hub(使用iot客户端c sdk)

c# - 从 Entity Framework 中删除单个记录?

c# - AngularJS 使用表达式作为 href

c# - ASP.net c# 按钮单击

azure - Outlook 加载项中单个用户的 Microsoft Graph 访问 token