private async Task <R> Send <T, R>(HttpMethod method, string uri, T postData, IDictionary <string, string> parameters)
        {
            // Create content if needed
            HttpContent content = CreateContent(method, postData);
            // bind parameters and send
            string parameterUri          = UriUtil.BindParameters(uri, parameters);
            HttpResponseMessage response = null;

            if (modifier != null)
            {
                var request = new HttpRequestMessage(method, parameterUri);
                request.Content = content;
                modifier.ModifyRequest(request, uri, parameters);
                response = await client.SendAsync(request).ConfigureAwait(false);
            }
            else
            {
                response = await SendAsync(method, parameterUri, content).ConfigureAwait(false);
            }
            if (!response.IsSuccessStatusCode)
            {
                throw new HttpResponseException(response);
            }
            return(await response.Content.ReadAsAsync <R>());
        }