public ActionResult <RecipeDto> CreateRecipe([FromBody] RecipeForCreationDto recipe,
                                                     [FromHeader(Name = ExtendedControllerBase.ACCEPT)] string mediaTypes)
        {
            var splitMediaTypes = mediaTypes.Split(',');

            if (!MediaTypeHeaderValue.TryParseList(splitMediaTypes,
                                                   out IList <MediaTypeHeaderValue> parsedMediaTypes))
            {
                return(BadRequest());
            }

            if (!_homeBrewRepository.WaterProfileExists(recipe.WaterProfileId))
            {
                ModelState.AddModelError(
                    "Description",
                    "The water profile ID for the recipe must exist.");
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var includeSteps = true;
            var finalRecipe  = _mapper.Map <Entities.Recipe>(recipe);

            _homeBrewRepository.AddRecipe(finalRecipe);
            finalRecipe.WaterProfile = _homeBrewRepository.GetWaterProfile(recipe.WaterProfileId, true);
            _homeBrewRepository.Save();

            var recipeToReturn = _mapper.Map <Models.RecipeDto>(finalRecipe);

            if (parsedMediaTypes.Any(pmt => pmt.SubTypeWithoutSuffix.EndsWith(this.HATEOAS, StringComparison.InvariantCultureIgnoreCase)))
            {
                var links = CreateLinksForRecipe(recipeToReturn.Id, includeSteps);

                var linkedResourceToReturn = recipeToReturn.ShapeData(null)
                                             as IDictionary <string, object>;

                linkedResourceToReturn.Add(this.LINKS, links);

                return(CreatedAtRoute(
                           "GetRecipe",
                           new { id = linkedResourceToReturn["Id"], includeSteps },
                           linkedResourceToReturn));
            }

            return(CreatedAtRoute(
                       "GetRecipe",
                       new { id = recipeToReturn.Id, includeSteps },
                       recipeToReturn));
        }