コード例 #1
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));
        }
コード例 #2
0
        /// <summary>
        /// 超文本驱动(实现HATEOAS 超媒体作为应用状态的引擎)
        /// </summary>
        /// <param name="author"></param>
        /// <returns></returns>
        private ResponseColloctionResource <AuthorDto> CreateLinksForAuthors(ResponseColloctionResource <AuthorDto> authors, dynamic pageData = null)
        {
            authors.Links.Add(new Link(HttpMethods.Post, "create a author", Url.Link(nameof(CreateAuthorAsync), null)));
            if (pageData != null)
            {
                authors.Links.Add(new Link(HttpMethods.Get, "previous", pageData.previousLink));

                authors.Links.Add(new Link(HttpMethods.Get, "next", pageData.nextLink));
            }
            return(authors);
        }