当尝试在连接到 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/