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

1、上一页和下一页的uri
2、总数和总页数
3、当前页和页容量

接着是服务端的数据以怎样的形式返回?

我们通常这样写:

{
    totalCount:10,
    result: [
        {id:1, name:"a"},
        {id:2, name:"b"}
    ]
}

以上,把分页相关和实体信息以json格式返回给前端。但在本篇,尝试另外一种方式:把分页信息放在Header中返回给前端。

const int maxPageSize = ;

[Route("api/items", Name="items")]
public IHttpActionResult Get(int page = , ing pageSize = )
{
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 > ? UrlHeloer.Link("items", new {
page = page -,
pageSize = pageSize,
...
}) : ""; var nextLink = page < totalPages? urlHelper.Link("items", new {
page = page + ,
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 - ))
.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"
}

ASP.NET Web API中把分页信息放Header中返回给前端的更多相关文章

  1. 前端使用AngularJS的$resource,后端ASP.NET Web API,实现分页、过滤

    在上一篇中实现了增删改查,本篇实现分页和过滤. 本系列包括: 1.前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查2.前端使用AngularJS的$re ...

  2. 如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)

    客户端js无需任何专门设置,使用通常的ajax调用即可: $.ajax({ url: '跨域URL', type: 'get', dataType: 'json', success: function ...

  3. ASP.NET WEB API 帮助文档引用单独项目中的DTO,见面上不显示字段注释问题解决办法

    StackOverFlow上的解决办法: 问题地址

  4. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  5. 跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?

    在<通过扩展让ASP.NET Web API支持W3C的CORS规范>中,我们通过自定义的HttpMessageHandler自行为ASP.NET Web API实现了针对CORS的支持, ...

  6. 使用ASP.NET Web API自带的类库实现对CORS的支持(在开发中使用这种方式)(转载)

    在<通过扩展让ASP.NET Web API支持W3C的CORS规范>中我们通过自定义的HttpMessageHandler为ASP.NET Web API赋予了跨域资源共享的能力,具体来 ...

  7. 剖析Asp.Net Web API中HttpController的激活

    在Asp.Net Web API中,请求的目标是定义在某个HttpController中的某个Action方法.当请求经过Asp.Net Web API消息处理管道到达管道"龙尾" ...

  8. 在ASP.NET Web API中实现CORS(跨域资源共享)

    默认情况下,是不允许网页从不同的域访问服务器资源的,访问遵循"同源"策略的原则. 会遇到如下的报错: XMLHttpRequest cannot load http://local ...

  9. [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API

    问题 怎么样将 Asp.Net Web Api 加入到现有的 Asp.Net MVC 项目中 解决方案 在 Visual Studio 2012 中就已经把 Asp.Net Web Api 自动地整合 ...

随机推荐

  1. html5手机 input file 上传图片 调用API

    <input type="file" accept="video/*;capture=camcorder"> <input type=&quo ...

  2. php数组去重(一维数组)

    <?php $arr = ['1', '1', 'PHP', 'PHP', 2, 3]; print_r($arr); echo "<br>"; print_r( ...

  3. php 爬取数据

    简单. 灵活.强大的PHP采集工具,让采集更简单一点. 简介: QueryList使用jQuery选择器来做采集,让你告别复杂的正则表达式:QueryList具有jQuery一样的DOM操作能力.Ht ...

  4. web----Tornado

    安装: pip3 install tornado 源码安装 https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz 简 ...

  5. 【Leetcode】404. Sum of Left Leaves

    404. Sum of Left Leaves [题目]中文版  英文版 /** * Definition for a binary tree node. * struct TreeNode { * ...

  6. 详解如何在 Linux 中安装最新的 Python 3.6 版本

    # 下载源码包安装,先装wget,或curl. yum install wget # 再安装解压缩和编译环境: yum install zlib-devel bzip2-devel openssl-d ...

  7. Jquery empty() remove() detach() 方法的区别

    方法简介: empty() This method removes not only child (and other descendant) elements, but also any text ...

  8. BZOJ1819 [JSOI]Word Query电子字典 Trie

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1819 题意概括 字符串a与字符串b的编辑距离是指:允许对a或b串进行下列“编辑”操作,将a变为b或 ...

  9. 7-6 Bandwidth UVA140

    没有清空向量导致debug了好久 这题难以下手  不知道怎么dfs 原来是用排序函数. letter[n]=i; id[i]=n++; 用来储存与设置标记十分巧妙 for(;;) { while(s[ ...

  10. JQuery框架2.位置属性|筛选方法|事件

    1.位置属性 jquery的css position获取匹配元素相对父元素的偏移位置:offset获取匹配元素在当前视口的相对偏移,返回的对象包含两个整型属性:top 和 left $("p ...