I did find a work-around. I had to bypass the SDK and call API directly to get the TokenInfo
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["RingCentralApiUrl"] + "/");
var credentials = Encoding.ASCII.GetBytes(String.Format("{0}:{1}", _appKey, _appSecret));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
var formContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("username", _appUserName),
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("access_token_ttl", "3600"),
new KeyValuePair<string, string>("refresh_token_ttl", "604800"),
new KeyValuePair<string, string>("password", _appPassword)
});
var response =
client.PostAsync("restapi/oauth/token", formContent).Result;
if (response.IsSuccessStatusCode)
{
var result = response.Content.ReadAsStringAsync().Result;
var token = JsonConvert.DeserializeObject<TokenInfo>(result);
rc.token = token;
return token;
}
}
C# async is tricky, if you don't do it properly your app will hang.
I will recommend never using ".Result", just stick to "await".
So "var token = await rc.Authorize(_appUserName, null, _appPassword).Result;"
should be "var token = await rc.Authorize(_appUserName, null, _appPassword);"
You are not alone:
https://www.google.com.hk/search?q=C%23+async+hang&oq=C%23+async+hang&aqs=chrome..69i57j69i5...And this is a C# programming issue instead of a SDK issue.
Hello!
I've tried different ways to call api from C# but I get (400)BAD REQUEST.
What am I doing wrong here?
Thank you very much!
var appKey = "myAppKey";
var appSecret = "myAppSecret";
var appUrl = "
https://platform.devtest.ringcentral.com";
var userName = "+19167582841";
var password = "myPassword";
var restClient = new RestClient(appKey, appSecret, appUrl);
var token = await restClient.Authorize(userName, null, password);
=======================================
I already tried this as well and get bad request:
var appKey = "myAppKey";
var appSecret = "myAppSecret";
var userName = "+19167582841";
var password = "myAppPassword";
var uri = "
https://platform.devtest.ringcentral.com/restapi/oauth/token";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(uri + "/");
var credentials = Encoding.ASCII.GetBytes(String.Format("{0}:{1}", appKey, appSecret));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
var formContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("username", userName),
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("access_token_ttl", "3600"),
new KeyValuePair<string, string>("refresh_token_ttl", "604800"),
new KeyValuePair<string, string>("password", password)
});
var response =
client.PostAsync("restapi/oauth/token", formContent).Result;
if (response.IsSuccessStatusCode)
{
var result = response.Content.ReadAsStringAsync().Result;
var token = JsonConvert.DeserializeObject<TokenInfo>(result);
//rc.token = token;
//return token;
}
}
Thank you very much!!