user3070072
user3070072

Reputation: 620

Pagination using Request URL for WebAPI

I am writing to seek help, in how can I implement a page number filter into the web api method below. I am aware of the 'pagesize' and 'take' property but this only allowed me to filter number of records.

I would like to be able, to show all records but spread the data through number of pages such as api/test?name=frs&page=2

Please provide some help/guide into how I can start implementing this task further, thanks.

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 });
    }

Upvotes: 0

Views: 1034

Answers (1)

Dbl
Dbl

Reputation: 5914

Try this combined with your pagination code:

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

Upvotes: 1

Related Questions