asp.net html5 header,ASP.NET Web API中把分页信息放Header中返回给前端

谈到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 = newUrlHelper(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));returnOk(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"

}

原文:http://www.cnblogs.com/darrenji/p/5148802.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值