public Task <PageList <Author> > GetPageAsync(ResourcesParameters pageParameters) { IQueryable <Author> source = DbContext.Set <Author>(); if (!string.IsNullOrEmpty(pageParameters.AuthorName)) { source = source.Where(m => m.Name.Contains(pageParameters.AuthorName)); } var orderSource = source.OrderBy(pageParameters.SortBy); return(PageList <Author> .CreatePageLsit(orderSource, pageParameters.PageIndex, pageParameters.PageSize)); }
[ResponseCache(Duration = 20)]//, VaryByQueryKeys = new string[] { "PageIndex", "PageSize" } public async Task <ActionResult <ResponseColloctionResource <AuthorDto> > > GetAuthorsAsync([FromQuery] ResourcesParameters resourcesParameters) { //获取数据 var authors = await repositoryWrapper.Author.GetPageAsync(resourcesParameters); #region 验证客户端缓冲 ////验证客户端缓冲 和缓冲中间建分开用,可以考虑和imemorycache配合使用 //var authorHash = HashFactory.GetHash(authors); //Response.Headers[HeaderNames.ETag] = authorHash; //if (Request.Headers.TryGetValue(HeaderNames.IfNoneMatch, out var requestHash) && authorHash == requestHash) //{ // return StatusCode(StatusCodes.Status304NotModified); //} //否则返回全部响应信息 #endregion var name = System.Net.WebUtility.UrlEncode(resourcesParameters.AuthorName); var pageData = new { pageIndex = authors.PageIndex, pageSize = authors.PageSize, totalPages = authors.TotalPages, totalCount = authors.TotalCount, previousLink = authors.HasPrevious ? Url.Link(nameof(GetAuthorsAsync), new { pageindex = resourcesParameters.PageIndex - 1, pageSize = resourcesParameters.PageSize, authorName = name }) : null, nextLink = authors.HasNext ? Url.Link(nameof(GetAuthorsAsync), new { pageindex = resourcesParameters.PageIndex + 1, pageSize = resourcesParameters.PageSize, authorName = name }) : null, authorName = name }; var str = JsonConvert.SerializeObject((pageData)); Response.Headers.Add("PageMessage", JsonConvert.SerializeObject((pageData))); var authorDtos = mapper.Map <IEnumerable <AuthorDto> >(authors); var linkAuthorDtos = new ResponseColloctionResource <AuthorDto>(authorDtos.Select(author => CreateLinksForAuthor(author)).ToList()); return(CreateLinksForAuthors(linkAuthorDtos, pageData)); }