Has anyone been able to send Post requests from within a Datacap custom action?
Our Datacap version is: Build: v 9.1.8.04494. When I invoke the action from a Visual Studio's console project, it can issue the Post requests fine. When the same action is triggered from RuleRunner, it always fails.
I tried RestSharp as well as HttpCliet, neither worked.
Here's the RestSharp implementation:
public string GetAccessToken_1()
{
var client = new RestClient(BaseUrl);
var request = new RestRequest(Path, Method.Post);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("client_id", ClientId);
request.AddParameter("client_secret", ClientSecret);
request.AddParameter("scope", Scope);
var response = client.Execute(request);
var jsonContent = response?.Content?.ToString();
string accessToken = string.Empty;
if ( null != jsonContent)
{
//Console.WriteLine(jsonContent);
dynamic jtoken = JsonConvert.DeserializeObject(jsonContent);
accessToken = jtoken?.access_token;
}
return accessToken;
}
I tried another implementation using HttpClient.
public string GetAccessToken_2()
{
string accessToken = string.Empty;
var reqBody = new List<KeyValuePair<string, string>>();
reqBody.Add(new KeyValuePair<string, string>("client_id", ClientId));
reqBody.Add(new KeyValuePair<string, string>("client_secret", ClientSecret));
reqBody.Add(new KeyValuePair<string, string>("scope", Scope));
var formContent = new FormUrlEncodedContent(reqBody);
HttpClient httpClient = new HttpClient();
var url = BaseUrl + Path;
httpClient.BaseAddress = new Uri(BaseUrl);
var response = httpClient.PostAsync(url, formContent).Result;
if (response != null && response.StatusCode == HttpStatusCode.OK)
{
String jsonContent = response.Content?.ReadAsStringAsync()?.Result;
if (!string.IsNullOrWhiteSpace(jsonContent))
{
dynamic jtoken = JsonConvert.DeserializeObject(jsonContent);
accessToken = jtoken?.access_token?.ToString();
}
}
return accessToken;
}
Thanks,
Walter