/// <summary>
        /// Get a ToolConsumerProfile from the service endpoint.
        /// </summary>
        /// <param name="serviceUrl">The full URL of the ToolConsumerProfile service.</param>
        /// <returns>A <see cref="ToolConsumerProfileResponse"/> which includes both the HTTP status code
        /// and the <see cref="ToolConsumerProfile"/> if the HTTP status is a success code.</returns>
        public static async Task<ToolConsumerProfileResponse> GetToolConsumerProfile(string serviceUrl)
        {
            var profileResponse = new ToolConsumerProfileResponse();
            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(LtiConstants.ToolConsumerProfileMediaType));

                var response = await client.GetAsync(serviceUrl);
                profileResponse.StatusCode = response.StatusCode;
                if (response.IsSuccessStatusCode)
                {
                    profileResponse.ToolConsumerProfile = await response.Content.ReadJsonAsObjectAsync<ToolConsumerProfile>();
                }
            }
            return profileResponse;
        }
        /// <summary>
        /// Get a ToolConsumerProfile from the service endpoint.
        /// </summary>
        /// <param name="serviceUrl">The full URL of the ToolConsumerProfile service.</param>
        /// <returns>A <see cref="ToolConsumerProfileResponse"/> which includes both the HTTP status code
        /// and the <see cref="ToolConsumerProfile"/> if the HTTP status is a success code.</returns>
        public static async Task <ToolConsumerProfileResponse> GetToolConsumerProfileAsync(string serviceUrl)
        {
            var profileResponse = new ToolConsumerProfileResponse();

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(LtiConstants.ToolConsumerProfileMediaType));

                var response = await client.GetAsync(serviceUrl);

                profileResponse.StatusCode = response.StatusCode;
                if (response.IsSuccessStatusCode)
                {
                    profileResponse.ToolConsumerProfile = await response.Content.ReadJsonAsObjectAsync <ToolConsumerProfile>();
                }
            }
            return(profileResponse);
        }