.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 }
浙公网安备 33010602011771号