public IActionResult GetVideosWithCustomeMedia(string username, VideoResourceParameters parameters, [FromHeader(Name = "Accept")] string mediaType) { if (!typeHelperService.TypeHasProperties <VideoForDisplayDTO>(parameters.Fields)) { return(BadRequest()); } if (!propertyMappingService.ValidMappingExistsFor <VideoForDisplayDTO, Video>(parameters.OrderBy)) { return(BadRequest()); } if (string.IsNullOrEmpty(username)) { return(BadRequest()); } var videos = videoRepository.GetEntities(username, parameters); if (videos == null) { return(NotFound()); } var paginatioMetadata = new { totalCount = videos.TotalCount, pageSize = videos.PageSize, currentPage = videos.CurrentPage, totalPages = videos.TotalPages }; Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginatioMetadata)); var videosToReturn = Mapper.Map <IEnumerable <VideoForDisplayDTO> >(videos); if (mediaType == "application/vnd.ak.hateoas+json") { var linksForVideos = CreateLinksForVideos(username, parameters, videos.HasNext, videos.HasPrevious); var result = videosToReturn.ShapeData(parameters.Fields); result.Select(video => { var videoAsDictionary = video as IDictionary <string, object>; var videoLinks = CreateLinksForVideoById((int)videoAsDictionary["VideoId"], parameters.Fields); videoAsDictionary.Add("links", videoLinks); return(videoAsDictionary); }); var linkedCollectionResource = new { value = result, links = linksForVideos }; return(Ok(linkedCollectionResource)); } else { var previousLink = videos.HasPrevious ? CreateVideosResourceUri(parameters, ResourceUriType.previousPage, username) : null; var nextLink = videos.HasNext ? CreateVideosResourceUri(parameters, ResourceUriType.nextPage, username) : null; var newpaginatioMetadata = new { totalCount = videos.TotalCount, pageSize = videos.PageSize, currentPage = videos.CurrentPage, totalPages = videos.TotalPages, previousPageLink = previousLink, nextPageLink = nextLink }; Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(newpaginatioMetadata)); videosToReturn = Mapper.Map <IEnumerable <VideoForDisplayDTO> >(videos); var links = CreateLinksForVideos(username, parameters, videos.HasNext, videos.HasPrevious); videosToReturn = videosToReturn.Select(v => { var videoWithLinks = CreateLinksForVideo(v); return(videoWithLinks); }); var result = videosToReturn.ShapeData(parameters.Fields); return(Ok(result)); } }