【问题标题】:Pagination using Request URL for WebAPI使用 WebAPI 的请求 URL 进行分页
【发布时间】:2014-09-05 18:31:17
【问题描述】:

我写信寻求帮助,我如何在下面的 web api 方法中实现页码过滤器。我知道 'pagesize' 和 'take' 属性,但这仅允许我过滤记录数。

我希望能够显示所有记录,但通过 api/test?name=frs&page=2 等页面数传播数据

请提供一些帮助/指南,了解如何进一步开始执行此任务,谢谢。

public HttpResponseMessage get([FromUri] Query query )
  {
        int pageSize = 10;
        int page = 0;

        IQueryable<data_qy> Data = null;

        var totalCount = Data.Count();
       // var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);

       // var urlHelper = new UrlHelper(Request);
       // var prevLink = page > 0 ? urlHelper.Link("DefaultApi", new { page = page - 1 }) : "";
       // var nextLink = page < totalPages - 1 ? urlHelper.Link("DefaultApi", new { page = page + 1 }) : "";

        Data = Data.OrderByDescending(c => c.UploadDate);

        var data = Data.Skip(pageSize * page).Take(pageSize).ToList();

        if (!data.Any())
        {
            var message = string.Format("No data found");
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
        }

        //return Request.CreateResponse(HttpStatusCode.OK, data);
        //return Request.CreateResponse(HttpStatusCode.OK, new { totalCount, totalPages, prevLink, nextLink, data });
        return Request.CreateResponse(HttpStatusCode.OK, new { totalCount, data });
    }

【问题讨论】:

  • “我希望能够显示所有记录,但在页面之间递增。”什么?如此不清楚,这让我想投反对票
  • 对于没有明确解释的道歉,我已经编辑了上述声明,以澄清我的目标。如果可能,请进一步提供建议。谢谢
  • 您的更新仍然没有意义。你是想说如果有人通过第 2 页,你想返回第 1 页 2?
  • @user3070072 这仍然有些不清楚。从您的网址来看,您似乎只是在尝试进行普通的分页。如果这就是您所要求的,那么您就可以很好地用文字隐藏您的意图...另外,如果您要问如何使分页清楚地起作用,则您必须做功课,而不是在 SO 上问它
  • 如果查询返回 20 条数据记录,我希望每个页面显示 10 行记录,因此如果我调用 api/test?name=frs&amp;page=1,将显示查询的前 10 条记录,如果我查询api/test?name=frs&amp;page=2,页面将显示第二组 10 条记录。我希望我已经清楚地澄清了分页问题,​​如果没有,请告诉我。感谢您的回复。

标签: c# asp.net-mvc asp.net-web-api pagination


【解决方案1】:

结合你的分页代码试试这个:

        var pageValue = Request.RequestUri.ParseQueryString().Get("page");
        int currentPage;
        if (!int.TryParse(pageValue, out currentPage))
        {
            currentPage = 0;
        }

【讨论】:

  • 亲爱的安德烈亚斯,为迟到的回复道歉。感谢您的时间和帮助。我设法开始使用您的解决方案并对代码进行其他几处更改。非常感谢您的帮助和时间。
猜你喜欢
  • 2012-05-29
  • 2016-08-12
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多