public IActionResult GetAuthor(Guid id, [FromQuery] string fields) { Contract.Ensures(Contract.Result <IActionResult>() != null); AuthorDto author = null; if (!_typeHelperService.TypeHasProperties <AuthorDto>(fields)) { return(BadRequest()); } if (!_libraryRepository.AuthorExists(id)) { return(NotFound()); } TryCatchHelper.Execute(() => { var authorFromRepo = _libraryRepository.GetAuthor(id); author = authorFromRepo.Map <AuthorDto>(); }).IfNotNull(ex => { return(StatusCode(500, "An Unhandled fault Happend. Try again later")); }); if (author.IsNotNull()) { var links = CreateLinksForAuthor(id, fields); var linkedResourceToReturn = author.ShapeData(fields) as IDictionary <string, object>; linkedResourceToReturn.Add("links", links); return(Ok(linkedResourceToReturn)); } return(NotFound()); }