/// <summary>
        /// Cast a vote on the specified idea, replacing any previous vote by the requesting person. The incoming JSON must include a boolean "promote" field
        /// that is true if the requestor is promoting this idea, or false if the requestor is demoting it.
        /// </summary>
        /// <param name="contentID">The ID of the content object for which to cast a "promote" vote</param>
        /// <param name="idea_vote">The vote entity containing the promote field (assumed to be true if not present)</param>
        public void CreateVote(int contentID, IdeaVote idea_vote)
        {
            string url = ideaVotesUrl;
            url += "/" + contentID.ToString();

            string json = JsonConvert.SerializeObject(idea_vote, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
            try
            {
                PostAbsolute(url, json);
            }
            catch (HttpException e)
            {
                switch (e.GetHttpCode())
                {
                    case 400:
                        throw new HttpException(e.WebEventCode, "If any input field is malformed, or the ID does not specify an idea", e);
                    case 403:
                        throw new HttpException(e.WebEventCode, "If you are not allowed to access the specified content object", e);
                    case 404:
                        throw new HttpException(e.WebEventCode, "If the specified content object does not exist", e);
                    case 409:
                        throw new HttpException(e.WebEventCode, "You attempted to vote on an issue for which voting has been disabled", e);
                    case 410:
                        throw new HttpException(e.WebEventCode, "If this Jive instance is not licensed for the Ideation module", e);
                }
            }

            return;
        }