Azure IoT Hub设备查询分页续令牌失效,始终返回首页设备
问题解决:Azure IoT Hub设备分页始终返回前10台设备
你的问题核心在于错误手动构造了continuationToken,Azure IoT Hub的查询续传令牌不是自定义格式,必须依赖上一次查询结果返回的令牌才能实现分页。
正确的分页实现逻辑
- 首次查询无需传入continuationToken,直接获取第一页数据,同时记录返回的续传令牌
- 后续分页查询时,传入上一次查询得到的continuationToken,而非自行拼接格式
修改后的代码示例:
registryManager = RegistryManager.CreateFromConnectionString("{iot hub connection string}"); int pageSize = 10; var query = registryManager.CreateQuery("SELECT * FROM devices", pageSize); string continuationToken = null; // 循环获取到目标页码对应的续传令牌 for (int i = 1; i < pageNumber; i++) { var page = await query.GetNextAsTwinAsync(new QueryOptions() { ContinuationToken = continuationToken }); continuationToken = query.ContinuationToken; // 无更多数据时提前终止 if (string.IsNullOrEmpty(continuationToken)) { break; } } // 获取目标页码的设备列表 var targetPage = await query.GetNextAsTwinAsync(new QueryOptions() { ContinuationToken = continuationToken }); var deviceList = targetPage.ToList();
关键说明
- Azure IoT Hub查询不支持SQL式的
OFFSET/SKIP语法,无法通过页码直接计算跳过条目,必须通过续传令牌逐步分页 - 手动拼接的
skip=&total=格式令牌不被IoT Hub识别,因此每次查询都会默认返回第一页数据 - 建议使用
await异步调用,避免直接用.Result引发线程阻塞问题
内容的提问来源于stack exchange,提问作者Clayton
相关产品推荐
相关产品推荐

