public async Task<HttpResponseMessage> PostAsync(string url, SortedDictionary<string, string> parameters, bool forInitialAuth = false)
{
if (forInitialAuth)
{
if (clientID == null && clientSecret == null)
{
return null;
}
}
else
{
if (clientID != null && clientSecret != null && bearerToken == null)
{
await this.StartApplicationOnlyAuth();
}
if (bearerToken == null) return null;
}
var querystring = parameters.Aggregate("", (current, entry) => current + (entry.Key + "=" + entry.Value + "&"));
if (!string.IsNullOrWhiteSpace(querystring))
querystring = querystring.TrimLastChar();
var oauth2Bearertoken = forInitialAuth
? String.Format("Basic {0}",
String.Format("{0}:{1}", clientID.UrlEncode(), clientSecret.UrlEncode()).ToBase64String())
: String.Format("Bearer {0}", bearerToken);
var handler = new HttpClientHandler();
var client = new HttpClient(handler);
if (handler.SupportsAutomaticDecompression)
{
handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
}
client.DefaultRequestHeaders.Add("Authorization", oauth2Bearertoken);
client.DefaultRequestHeaders.Add("User-Agent", TwitterApi.UserAgent());
var data = new StringContent(querystring, Encoding.UTF8, "application/x-www-form-urlencoded");
var download = client.PostAsync(url, data).ToObservable().Timeout(TimeSpan.FromSeconds(waitTimeoutSeconds));
return await download;
}
}