protected async Task <TResult> PostAsync <TData, TResult>(string uri, TData data, string header = "")
        {
            HttpClient.EnsureAuthTokenSet(_settingsService.AuthAccessToken);

            if (!string.IsNullOrEmpty(header))
            {
                HttpClient.AddHeaderParameter(header);
            }

            var content = new StringContent(JsonConvert.SerializeObject(data));

            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var response = await ExecuteAuthenticatedRequestAsync(async() => await HttpClient.PostAsync(uri, content), CancellationToken.None);

            string serialized = await response.Content.ReadAsStringAsync();

            TResult result = await Task.Run(() =>
                                            JsonConvert.DeserializeObject <TResult>(serialized, _serializerSettings));

            return(result);
        }
        public async Task <TResult> PutAsync <TResult>(string uri, TResult data, string token = "", string header = "")
        {
            HttpClient httpClient = CreateHttpClient(token);

            if (!string.IsNullOrEmpty(header))
            {
                httpClient.AddHeaderParameter(header);
            }

            var content = new StringContent(JsonConvert.SerializeObject(data));

            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var response = await ExecuteAuthenticatedRequestAsync(async() => await httpClient.PutAsync(uri, content), CancellationToken.None);

            await HandleResponse(response);

            string serialized = await response.Content.ReadAsStringAsync();

            TResult result = await Task.Run(() =>
                                            JsonConvert.DeserializeObject <TResult>(serialized, _serializerSettings));

            return(result);
        }