博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Web API中把分页信息放Header中返回给前端
阅读量:4967 次
发布时间:2019-06-12

本文共 2061 字,大约阅读时间需要 6 分钟。

 

谈到ASP.NET Web API的分页,考虑的因素包括:

1、上一页和下一页的uri
2、总数和总页数
3、当前页和页容量
接着是服务端的数据以怎样的形式返回?
我们通常这样写:
{
    totalCount:10,
    result: [
        {id:1, name:"a"},
        {id:2, name:"b"}
    ]
}
以上,把分页相关和实体信息以json格式返回给前端。但在本篇,尝试另外一种方式:把分页信息放在Header中返回给前端。

const int maxPageSize = 10;[Route("api/items", Name="items")]public IHttpActionResult Get(int page = 1, ing pageSize = 5){    try    {        var items = _repo.GetItem()            .sort()            .Where();                    if(pageSize > maxPageSize)        {            pageSize = maxPageSize;        }                var totalCount = items.Count();        var totalPages = (int)Math.Ceiling((double)totalCount/pageSize);                var urlHelper = new UrlHelper(Request);        var prevLink = page > 1 ? UrlHeloer.Link("items", new {            page = page -1,            pageSize = pageSize,            ...        }) : "";                var nextLink = page < totalPages? urlHelper.Link("items", new {            page = page + 1,            pageSize = pageSize,            ...        }) : "";                var paginationHeader = new         {            currentPage = page,            pageSize = pageSize,            totalCount = totalCount,            totalPages = totalPages,            previousPageLink = prevLink,            nextPageLink = nextLink        };                //放到Header中        HttpContext.Current.Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader));                var result = items            .Skip(pageSize * (page - 1))            .Take(pageSize)            .ToList()            .Select(e => ItemFactory.CreateItem(e));                    return Ok(result);                }    catch(Exception)    {        //TODO:处理异常    }}

 

客户端发出如下请求:

localhost:4321/api/items?page=2&pagesize=2
在响应中有一个X-Pagination属性:
X-Pagination:{
    "currentPage":2,
    "pageSize":2,
    "totalPages":4,
    "previousPageLink": "http://localhost:4321/api/items?page=1&pageSize=2"
    "nextPageLink":"http://localhost:4321/api/items?page=3&pageSize=2"
}

 

转载于:https://www.cnblogs.com/darrenji/p/5148802.html

你可能感兴趣的文章
Asp.Net Core WebApi中接入Swagger组件(初级)
查看>>
和菜鸟一起学linux之DBUS基础学习记录
查看>>
主流浏览器内核介绍(前端开发值得了解的浏览器内核历史)
查看>>
JavaScript词法
查看>>
使用C++来开发WPF
查看>>
去除partner页面消息 自动添加关注者的功能
查看>>
java 核心编程——文件过滤类(FileFilter和FilenameFilter)
查看>>
pycharm快捷键
查看>>
js设置,删除,添加cookie,同时解决在目录下,不能设置、删除和添加的问题...
查看>>
visual studio 添加虚线的快捷键
查看>>
一加3,CM13蓝牙共享互联网 无效。
查看>>
Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener
查看>>
8款最受欢迎的HTML5/CSS3应用及源码
查看>>
8款功能强大的最新HTML5特效实例
查看>>
iText类库再pdf中显示中文字体
查看>>
python文本读写数据
查看>>
【JVM】Java 8 中的常量池、字符串池、包装类对象池
查看>>
常见数据结构与算法整理总结(上)
查看>>
apxs添加apache模块
查看>>
oracle使用过期
查看>>