gpt4 book ai didi

asp.net-core - 在 ASP.NET Core 2.1 Web API 中实现分页

转载 作者:行者123 更新时间:2023-12-02 00:13:28 25 4
gpt4 key购买 nike

我进行了搜索,但没有真正找到有关如何在 ASP.NET WebAPI Core 2.1 应用程序中实现分页逻辑的文章...

我有以下内容

[Route("api/[controller]")]
[ApiController]
[EnableCors("AllowMyOrigin")]
public class EntriesController : ControllerBase
{
private readonly EntriesContext _context;

public EntriesController(EntriesContext context) {
_context = context;

if (_context.Entries.Count() == 0) {
_context.Entries.Add(new Entry { From = "default", To = "default" });
_context.SaveChanges();
}
}

[HttpGet]
public ActionResult<List<Entry>> GetAll() {
return _context.Entries.ToList();
}

[HttpGet("{id}", Name = "GetEntry")]
public ActionResult<Entry> GetById(long id) {
var item = _context.Entries.Find(id);
if (item == null) { return NotFound(); }
return item;
}

现在,我希望使用新参数 pagepageSize 对我的条目进行分页。说

/api/entries?pageSize=3&page=2 

我应该通过添加一些http参数来使用GetAll()方法,还是创建一个新方法?在没有 pageSize 的情况下使用 page 没有多大意义,我该如何管理它?

最佳答案

有库,如X.PagedList您可以使用。坦率地说,分页非常简单,所以您可能甚至不需要它。您需要知道的只是页码、页面大小和结果总数。页码显然来自请求,页面大小也可以,如果您希望它可定制,或者您可以对其进行硬编码。

public ActionResult<List<Entry>> GetAll(int page = 1, int size = 10)

然后,您可以使用SkipTake来获取特定页面的数据:

var query = _context.Entries;
var entries = await query.Skip((page - 1) * size).Take(size).ToListAsync();
var count = await query.CountAsync();

然后,您需要知道的只是总页数,可以通过以下方式简单计算:

var totalPages = (int)Math.Ceil(count / (float)size);

由此,您可以计算出您需要的任何其他内容,即:

var firstPage = 1; // obviously
var lastPage = totalPages;
var prevPage = page > firstPage ? page - 1 : firstPage;
var nextPage = page < lastPage ? page + 1 : lastPage;

关于asp.net-core - 在 ASP.NET Core 2.1 Web API 中实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52331318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com