ASP.NET Web API中把分页信息放Header中返回给前端
2023-09-11 14:16:51 时间
谈到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"
}
相关文章
- asp.net core 3.x ApiController可以自动推断参数;自动验证模型状态,如果验证不通过,会自动返回400 ,前后端传参get,post
- 使用 ASP.NET Core MVC 创建 Web API 系列文章目录
- 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序
- ASp.net页面生存周期
- ASP.NET Core Dependency Injection Best Practices, Tips & Tricks
- Owin对Asp.net Web的扩展
- Secure a Web API with Individual Accounts and Local Login in ASP.NET Web API 2.2
- asp.net web site中reference的version的autoupdate
- ASP.NET Razor - C# and VB Code Syntax
- Web Servers in Visual Studio for ASP.NET Web Projects
- WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- Asp.net MVC利用Ajax.BeginForm实现bootstrap模态框弹出,并进行前段验证
- ASP.NET Web API 中的返回数据格式以及依赖注入
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)
- 使用HttpClient消费ASP.NET Web API服务
- 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法
- ASP.NET Web API实践系列02,在MVC4下的一个实例, 包含EF Code First,依赖注入, Bootstrap等
- 《ASP.NET MVC 4 实战》----1.2 ASP.NET MVC是什么
- 基于ASP.NET+ SQL Server实现(Web)医院信息管理系统【100010235】
- 动态生成web表-asp.net table
- asp.net web.config 经典模式和集成模式相关配置
- asp.net web api CORS
- 使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API
- asp.net-Creating JavaScript objects from ASP.NET objects
- asp.net发布网站的详细步骤
- C#-asp.net 每天的某时刻定时执行任务
- ASP.NET-Razor-注解 @section Scripts{}的使用
- 在Win2003、Win7、XP中配置IIS搭建ASP.NET Web网站或应用程序(1)