当前,在我的Rest服务中,我使用以下模型返回分页数据。
public class PagedResults<T>
{
public List<LinkModel> Links { get; set; }
public int TotalCount { get; set; }
public double TotalPages { get; set; }
public List<T> Results { get; set; }
}
一切正常,但我遇到了以下帖子。
http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#pagination
我的好奇心达到了顶峰,它提到使用HTTP header 返回链接和分页信息。尽管该帖子提到了RFC 5988,但我无法弄清这到底意味着什么?难道每个人都被实际采纳为某种标准吗?
这里的问题在ASP.Net Web API 2中,是否支持在链接头中添加分页信息?我使用了intellisense来细读HTTP响应 header ,但没有找到链接或任何类似的东西。
我找到了这篇文章,但是它并没有真正回答我在Web API 2中轻松做到这一点的问题。
Link headers vs link elements for RESTful JSON
最佳答案
您可以检查我的post here,它显示如何将分页添加为“custom”(X-Pagination) header ,以下是示例代码,可能有帮助:
public IEnumerable<StudentBaseModel> Get(int page = 0, int pageSize = 10)
{
IQueryable<Student> query;
query = TheRepository.GetAllStudentsWithEnrollments().OrderBy(c => c.LastName);
var totalCount = query.Count();
var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
var urlHelper = new UrlHelper(Request);
var prevLink = page > 0 ? urlHelper.Link("Students", new { page = page - 1, pageSize = pageSize }) : "";
var nextLink = page < totalPages - 1 ? urlHelper.Link("Students", new { page = page + 1, pageSize = pageSize }) : "";
var paginationHeader = new
{
TotalCount = totalCount,
TotalPages = totalPages,
PrevPageLink = prevLink,
NextPageLink = nextLink
};
System.Web.HttpContext.Current.Response.Headers.Add("X-Pagination",
Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader));
var results = query
.Skip(pageSize * page)
.Take(pageSize)
.ToList()
.Select(s => TheModelFactory.CreateSummary(s));
return results;
}
关于c# - 向Web Api 2中的链接标题添加分页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26080651/