c# - .NET Core 2.2 Web API 中的简单/基本页码和限制返回数据的大小
问题描述
我需要添加简单的页码并将 Web API 中返回数据的大小限制到这样的控制器。整个项目都在 GitHub 上,好像有人想看到更多。
https://github.com/lukaszFD/IPI-PAN_WEB_API
public class Documentation
{
private readonly DocumentationContext _doc;
public Documentation()
{
_doc = new DocumentationContext();
}
public async Task<List<GrTables>> DBDocumentation()
{
List<GrTables> list = await Task.Run(() => _doc.GrTables.ToList()).ConfigureAwait(true);
return list;
}
}
public class GrTablesController : ControllerBase
{
private readonly ILogger<GrTablesController> _logger;
public GrTablesController(ILogger<GrTablesController> logger)
{
_logger = logger;
}
[HttpGet("Documentation/All")]
public async Task<ActionResult<List<GrTables>>> GetGlobalRespositoryDocumentation()
{
var data = await new Documentation().DBDocumentation();
if (data == null)
{
_logger.LogWarning("No data found for GetGlobalRespositoryDocumentation/Documentation/All");
return NotFound();
}
return Ok(data);
}
}
解决方案
我建议对您的 EF 查询使用分页。像这样的东西:
public async Task<List<GrTables>> GetPaginatedResult(int pageSize, int pageNumber)
{
var query = _doc.Set<GrTables>().AsQueryable();
return await query.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToListAsync();
}
我还喜欢返回带有有助于处理和请求更多分页数据的信息的分页数据。
public class PageMetadata
{
public int TotalRecordCount { get; set; }
public string NextPageLink { get; set; }
public string PreviousPageLink { get; set; }
public string FirstPageLink { get; set; }
public string LastPageLink { get; set; }
public int ActualPage { get; set; }
public int RecordsPerPage { get; set; }
public int TotalPages { get; set; }
}
public class PagedResponse<TResponseModel>
{
public IEnumerable<TResponseModel> Records { get; set; }
public PageMetadata Metadata { get; set; }
}
[HttpGet]
public async Task<IActionResult> GetPagedServiceData(
[FromQuery] int pageNumber,
[FromQuery] int pageSize)
{
var result = await new Documentation().GetPaginatedResult(pageNumber, pageSize);
return Ok(result);
}
推荐阅读
- c - 多个线程重新锁定互斥锁
- javascript - Firebase Cloud Function 使用不正确的值更新 ref
- office-js - Microsoft O365 缓存加载项 - Office.context.mailbox.item 为空
- javascript - Javascript 事件和 React 事件之间有什么区别吗?
- python - 如何使二叉树的搜索/遍历方法起作用?
- java - 如何从文件中获取输入并在java中搜索该输入?
- python - 如何在渴望模式下访问张量值
- python - 如何停用公会的命令
- android - Flutter 视频播放器在 Vimeo 视频中抛出异常
- c++ - 最大公因数——返回意义?