protected async override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            var sendParameter = parameters;

            if (request.Method == HttpMethod.Post)
            {
                // form url encoded content
                if (request.Content is FormUrlEncodedContent)
                {
                    // url encoded string
                    var extraParameter = await request.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var parsed = Utility.ParseQueryString(extraParameter, true); // url decoded
                    sendParameter = sendParameter.Concat(parsed);

                    request.Content = new FormUrlEncodedContentEx(parsed);
                }
            }

            var headerParams = OAuthUtility.BuildBasicParameters(
                consumerKey, consumerSecret,
                request.RequestUri.OriginalString, request.Method, token,
                sendParameter);

            headerParams = headerParams.Concat(parameters);

            var header = headerParams.Select(p => p.Key + "=" + p.Value.Wrap("\"")).ToString(",");

            request.Headers.Authorization = new AuthenticationHeaderValue("OAuth", header);

            return(await base.SendAsync(request, cancellationToken).ConfigureAwait(false));
        }
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request,
                                                                      System.Threading.CancellationToken cancellationToken)
        {
            var encodedSendParams = parameters.Select(
                s => new KeyValuePair <string, string>(s.Key.UrlEncode(), s.Value.UrlEncode()));

            if (request.Method == HttpMethod.Post || request.Method == HttpMethod.Put)
            {
                // form url encoded content
                if (request.Content is FormUrlEncodedContent)
                {
                    // url encoded string
                    var extraParameter = await request.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var parsed = Utility.SplitQueryString(extraParameter).ToArray();
                    request.Content = new PseudoFormUrlEncodedContent(parsed);

                    encodedSendParams = encodedSendParams.Concat(parsed); // preserve encoded
                }
            }

            var headerParams = OAuthUtility.BuildBasicParameters(
                consumerKey, consumerSecret,
                request.RequestUri.OriginalString, request.Method, token,
                encodedSendParams);

            headerParams = headerParams.Concat(parameters);

            var header = headerParams.Select(p => p.Key + "=" + p.Value.Wrap("\"")).ToString(",");

            request.Headers.Authorization = new AuthenticationHeaderValue("OAuth", header);

            return(await base.SendAsync(request, cancellationToken).ConfigureAwait(false));
        }