.net core webapi 实现 简单的自我描述链接

 

目的是在请求结果后在响应头输出上一页下一页链接 实现简单的自我描述

 

上代码

主要就是 Url.Link 生成链接

 1  /// <summary>
 2         /// 生成简单自我描述链接
 3         /// </summary>
 4         /// <param name="paramaters"></param>
 5         /// <param name="paramaters2"></param>
 6         /// <param name="type"></param>
 7         /// <returns></returns>
 8         private string GenerateTouristRouteResourceURL(
 9             TouristRouteResourceParamaters paramaters,
10             PaginationResourceParamaters paramaters2,
11             ResourceUriType type)
12         {
13             //链接
14             string linkStr = null;
15             switch (type)
16             {
17                 case ResourceUriType.PreviousPage:
18                     linkStr = Url.Link("GetTouristRoutes", new
19                     {
20                         //fields = paramaters.Fields,
21                         //orderBy = paramaters.OrderBy,
22                         keyword = paramaters.Keyword,
23                         rating = paramaters.Rating,
24                         pageNumber = paramaters2.PageNumber - 1,
25                         pageSize = paramaters2.PageSize
26                     });
27                     break;
28                 case ResourceUriType.NextPage:
29                     linkStr = Url.Link("GetTouristRoutes", new
30                     {
31                         //fields = paramaters.Fields,
32                         //orderBy = paramaters.OrderBy,
33                         keyword = paramaters.Keyword,
34                         rating = paramaters.Rating,
35                         pageNumber = paramaters2.PageNumber + 1,
36                         pageSize = paramaters2.PageSize
37                     });
38                     break;
39                 case ResourceUriType.CurrnetPage:
40                     linkStr = Url.Link("GetTouristRoutes", new
41                     {
42                         //fields = paramaters.Fields,
43                         //orderBy = paramaters.OrderBy,
44                         keyword = paramaters.Keyword,
45                         rating = paramaters.Rating,
46                         pageNumber = paramaters2.PageNumber,
47                         pageSize = paramaters2.PageSize
48                     });
49                     break;
50                 default:
51                     linkStr = Url.Link("GetTouristRoutes",
52                     new
53                     {
54                         keyword = paramaters.Keyword,
55                         rating = paramaters.Rating,
56                         pageNumber = paramaters2.PageNumber,
57                         pageSize = paramaters2.PageSize
58                     });
59                     break;
60             }
61             return linkStr;
62         }

调用

 1  /// <summary>
 2         /// 获取所有旅游路线
 3         /// </summary>
 4         /// <returns></returns>
 5         [HttpGet(Name = "GetTouristRoutes")]
 6         public async Task<IActionResult> GetTouristRoutesAsync(
 7             [FromQuery] TouristRouteResourceParamaters paramaters,
 8             [FromQuery] PaginationResourceParamaters paramaters2)
 9         {
10             var touristRoutesFromRepo = await _touristRouteRepository
11             .GetTouristRoutesAsync(
12             paramaters.Keyword,
13             paramaters.RatingOperator,
14                  paramaters.RatingValue,
15                  paramaters2.PageSize,
16                  paramaters2.PageNumber
17              );
18             if (touristRoutesFromRepo == null || touristRoutesFromRepo.Count() <= 0)
19             {
20                 return NotFound("没有旅游路线");
21             }
22             var touristRoutesDto = _mapper.Map<IEnumerable<TouristRouteDto>>(touristRoutesFromRepo);
23             //上一页链接
24             var previousPageLink = touristRoutesFromRepo.HasPrevious
25              ? GenerateTouristRouteResourceURL(
26                  paramaters, paramaters2, ResourceUriType.PreviousPage)
27              : null;
28             //下一页链接
29             var nextPageLink = touristRoutesFromRepo.HasNext
30                 ? GenerateTouristRouteResourceURL(
31                     paramaters, paramaters2, ResourceUriType.NextPage)
32                 : null;
33             // x-pagination
34             var paginationMetadata = new
35             {
36                 previousPageLink,
37                 nextPageLink,
38                 totalCount = touristRoutesFromRepo.TotalCount,
39                 pageSize = touristRoutesFromRepo.PageSize,
40                 currentPage = touristRoutesFromRepo.CurrentPage,
41                 totalPages = touristRoutesFromRepo.TotalPages
42             };
43 
44             HttpContext.Response.Headers.Add("x-pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));
45 
46             return Ok(touristRoutesDto);
47         }

 

posted on 2023-05-07 12:07  是水饺不是水饺  阅读(33)  评论(0)    收藏  举报

导航