public IActionResult GetTanks(Guid terminalId, Guid dispenserId, Guid fuelTypeId, [FromQuery] TankResourceParameters tankResourceParameters) { if (!_propertyMappingService.ValidTankMappingExistsFor <TankDto, Entities.Tank> (tankResourceParameters.OrderBy)) { return(BadRequest()); } tankResourceParameters.TermimalId = terminalId; tankResourceParameters.DispenserId = dispenserId; tankResourceParameters.FuelTypeId = fuelTypeId; var tanksFromRepo = _tankRepository.GetTanks(tankResourceParameters); var paginationMetadata = new { totalCount = tanksFromRepo.TotalCount, pageSize = tanksFromRepo.PageSize, currentPage = tanksFromRepo.CurrentPage, totalPages = tanksFromRepo.TotalPages }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var links = CreateLinksForTank(tankResourceParameters, tanksFromRepo.HasNext, tanksFromRepo.HasPrevious); var shapedTank = _mapper.Map <IEnumerable <TankDto> >(tanksFromRepo) .ShapeData(tankResourceParameters.Fields); var shapedTankWithLinks = shapedTank.Select(tanks => { var tankAsDictionary = tanks as IDictionary <string, object>; var tankLinks = CreateLinksForTank(terminalId.ToString(), dispenserId.ToString(), fuelTypeId.ToString(), (string)tankAsDictionary["Id"], null); tankAsDictionary.Add("links", tankLinks); return(tankAsDictionary); }); var linkedCollectionResource = new { value = shapedTankWithLinks, links }; return(Ok(linkedCollectionResource)); }