如何用C# RestClient分页获取SQL数据库数据避免请求崩溃
实现RestClient分页获取Access数据
要解决大数据量单次请求崩溃的问题,我们可以通过分页循环调用接口分批获取数据,直到拿到所有记录。核心思路是和后端接口约定分页参数(页码、每页条数),每次请求获取一页数据,合并结果直到没有更多数据返回。
修改后的完整代码
同步版本(贴近你原有代码风格)
public List<Access> GetAllAccess() { var allAccess = new List<Access>(); int pageIndex = 1; // 起始页码,根据后端接口约定调整(有的是从0开始) int pageSize = 1000; // 每页条数,可根据接口性能调整 var client = new RestClient("http://ip+port"); while (true) { var request = new RestRequest("GetAccess", Method.Get); // 添加分页参数到请求 request.AddQueryParameter("pageIndex", pageIndex.ToString()); request.AddQueryParameter("pageSize", pageSize.ToString()); var response = client.Execute(request); if (response.StatusCode != System.Net.HttpStatusCode.OK) { // 可根据需求添加异常处理,比如抛出异常或中断循环 break; } var currentPage = JsonConvert.DeserializeObject<List<Access>>(response.Content); if (currentPage == null || currentPage.Count == 0) { // 没有更多数据,退出循环 break; } allAccess.AddRange(currentPage); // 如果当前页数据少于pageSize,说明是最后一页 if (currentPage.Count < pageSize) { break; } pageIndex++; } return allAccess; } public class Access { public string Name { get; set; } public string Surname { get; set; } }
异步版本(推荐,避免阻塞主线程)
public async Task<List<Access>> GetAllAccessAsync() { var allAccess = new List<Access>(); int pageIndex = 1; int pageSize = 1000; var client = new RestClient("http://ip+port"); while (true) { var request = new RestRequest("GetAccess", Method.Get); request.AddQueryParameter("pageIndex", pageIndex.ToString()); request.AddQueryParameter("pageSize", pageSize.ToString()); var response = await client.ExecuteAsync(request); if (response.StatusCode != System.Net.HttpStatusCode.OK) { break; } var currentPage = JsonConvert.DeserializeObject<List<Access>>(response.Content); if (currentPage == null || currentPage.Count == 0) { break; } allAccess.AddRange(currentPage); if (currentPage.Count < pageSize) { break; } pageIndex++; } return allAccess; }
关键说明
- 分页参数约定:确保后端接口支持接收
pageIndex和pageSize参数,并返回对应页码的数据。如果后端参数名不同(比如page、limit),需要同步修改请求中的参数名。 - 循环终止条件:两种情况停止循环:一是接口返回空列表,二是当前页数据量小于设定的
pageSize(说明已经是最后一页)。 - 异常处理:示例中仅简单中断循环,实际项目中可根据需求添加日志记录、重试机制或抛出自定义异常。
- pageSize选择:建议根据接口性能和服务器压力调整,比如1000-5000条/页,避免过大导致单次请求仍有崩溃风险。
内容的提问来源于stack exchange,提问作者user20370754
相关产品推荐
相关产品推荐

