Content Management and Capture

 View Only

Invoking http Post request from a Datacap custom action

  • 1.  Invoking http Post request from a Datacap custom action

    Posted Thu December 08, 2022 10:02 PM

    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