public async Task <IActionResult> GetAuthor(Guid authorId, string fields, [FromHeader(Name = "Accept")] string mediaType) { if (!MediaTypeHeaderValue.TryParse(mediaType, out var parsedMediaType)) { return(BadRequest()); } if (!mCheckerService.CheckIfValid <AuthorDto>(fields)) { return(BadRequest()); } var author = await mRepository.GetAuthorAsync(authorId); if (author == null) { return(NotFound()); } //for mediatype, that contains ...hateoas+json var includeLinks = parsedMediaType.SubTypeWithoutSuffix .EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase); IEnumerable <LinkDto> links = new List <LinkDto>(); if (includeLinks) { links = CreateLinksForAuthor(authorId, fields); } var primaryMediaType = includeLinks ? parsedMediaType.SubTypeWithoutSuffix .Substring(0, parsedMediaType.SubTypeWithoutSuffix.Length - 8) : parsedMediaType.SubTypeWithoutSuffix; //full author dto if (primaryMediaType == "vnd.marvin.author.full") { var fullResourceToReturn = mMapper.Map <AuthorFullDto>(author) .ShapeData(fields) as IDictionary <string, object>; if (includeLinks) { fullResourceToReturn.Add("links", links); } return(Ok(fullResourceToReturn)); } //friendly author dto var friendlyResourceToReturn = mMapper.Map <AuthorDto>(author) .ShapeData(fields) as IDictionary <string, object>; if (includeLinks) { friendlyResourceToReturn.Add("links", links); } return(Ok(friendlyResourceToReturn)); }