public async Task <IActionResult> GetDrinks([FromQuery] DrinkParameters drinkParameters, [FromQuery] PaginationParameters paginationParameters) { var drinksFromRepo = await _drinkRepository.GetDrinksAsync( drinkParameters.Keyword, drinkParameters.Country, drinkParameters.Brand, drinkParameters.Type, drinkParameters.PriceOperator, drinkParameters.PriceValue, drinkParameters.OrderBy, paginationParameters.PageNumber, paginationParameters.PageSize); if (drinksFromRepo.Count() <= 0) { return(NotFound("Drinks not found.")); } var previousLink = drinksFromRepo.HasPrevious ? GenerateDrinkResourceURL(drinkParameters, paginationParameters, ResourceUriType.PreviousPage) : null; var nextLink = drinksFromRepo.HasNext ? GenerateDrinkResourceURL(drinkParameters, paginationParameters, ResourceUriType.NextPage) : null; var paginationMetaData = new { previousLink, nextLink, totalCount = drinksFromRepo.TotalCount, totalPages = drinksFromRepo.TotalPages, pageSize = drinksFromRepo.PageSize, currentPage = drinksFromRepo.CurrentPage }; Response.Headers.Add("x-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetaData)); var drinkDto = _mapper.Map <DrinkDTO[]>(drinksFromRepo); var shapedData = drinkDto.ShapeData <DrinkDTO>(drinkParameters.Fields); return(Ok(shapedData)); }