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));
        }
Example #2
0
        [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));
        }