public void HandleRunAction(IPlatformService service, ref NodePlatformAction platformAction)
        {
            Platformservice = (IWebServicePlatform)service;

            RestClient = Platformservice.RestClient;

            try
            {
                GingerHttpRequestMessage Request = GetRequest(platformAction);

                GingerHttpResponseMessage Response = RestClient.PerformHttpOperation(Request);
                platformAction.Output.Add("Header: Status Code ", Response.StatusCode.ToString());

                foreach (var RespHeader in Response.Headers)
                {
                    platformAction.Output.Add("Header: " + RespHeader.Key, RespHeader.Value);
                }

                platformAction.Output.Add("Request:", Response.RequestBodyString);
                platformAction.Output.Add("Response:", Response.Resposne);
            }

            catch (Exception ex)
            {
                platformAction.addError(ex.Message);
            }
        }
        public GingerHttpResponseMessage PerformHttpOperation(GingerHttpRequestMessage GingerRequestMessage)
        {
            GingerHttpResponseMessage GRM = new GingerHttpResponseMessage();

            Client = new HttpClient(Handler);

            PreparBasicRequest(GingerRequestMessage, GRM);
            HttpResponseMessage Response = null;

            try
            {
                Response = Client.SendAsync(RequestMessage).Result;
            }


            catch (Exception e)
            {
            }
            finally
            {
                HandleResponseCookies(GingerRequestMessage);
            }


            GRM.StatusCode = Response.StatusCode;
            GRM.Headers    = new Dictionary <string, string>();
            //keeping the same pattern as existing Ginger Webserviced Plugin
            foreach (var Header in Response.Headers)
            {
                string headerValues = string.Empty;
                foreach (string val in Header.Value.ToArray())
                {
                    headerValues = val + ",";
                }
                headerValues = headerValues.Remove(headerValues.Length - 1);
                GRM.Headers.Add(Header.Key.ToString(), headerValues);
            }


            byte[] data = Response.Content.ReadAsByteArrayAsync().Result;
            GRM.Resposne = Encoding.Default.GetString(data);

            return(GRM);
        }
        private void SetRequestContent(HttpMethod RequestMethod, GingerHttpRequestMessage GingerRequestMessage, GingerHttpResponseMessage GRM)
        {
            List <KeyValuePair <string, string> > KeyValues = new List <KeyValuePair <string, string> >();

            if (RequestMethod.Method == HttpMethod.Get.Method)
            {
                if (GingerRequestMessage.BodyContentType == eContentType.XwwwFormUrlEncoded)
                {
                    string GetRequest = "?";
                    if (GingerRequestMessage.RequestKeyValues.Count > 0)
                    {
                        for (int i = 0; i < GingerRequestMessage.RequestKeyValues.Count; i++)
                        {
                            GetRequest += GingerRequestMessage.RequestKeyValues[i].Param + "=" + GingerRequestMessage.RequestKeyValues[i].Value + "&";
                        }
                    }
                    string ValuesURL = GingerRequestMessage.URL.ToString() + GetRequest.Substring(0, GetRequest.Length - 1);
                    Client.BaseAddress = new Uri(ValuesURL);
                }
                else
                {
                    Client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", GingerRequestMessage.ContentType);
                }
            }
            else
            {
                if ((GingerRequestMessage.BodyContentType != eContentType.XwwwFormUrlEncoded) && (GingerRequestMessage.BodyContentType != eContentType.FormData))
                {
                    BodyString = GingerRequestMessage.BodyString;
                }

                switch (GingerRequestMessage.BodyContentType)
                {
                case eContentType.XwwwFormUrlEncoded:
                    if (GingerRequestMessage.RequestKeyValues.Count > 0)
                    {
                        List <KeyValuePair <string, string> > RequestKeyValues = new List <KeyValuePair <string, string> >();

                        for (int i = 0; i < GingerRequestMessage.RequestKeyValues.Count; i++)
                        {
                            KeyValues.Add(new KeyValuePair <string, string>(GingerRequestMessage.RequestKeyValues[i].Param, GingerRequestMessage.RequestKeyValues[i].Value));
                        }
                        RequestMessage.Content = new FormUrlEncodedContent(RequestKeyValues);
                        GRM.RequestBodyString  = RequestMessage.Content.ToString();
                    }
                    break;

                case eContentType.FormData:
                    if (GingerRequestMessage.RequestKeyValues.Count > 0)
                    {
                        MultipartFormDataContent requestContent = new MultipartFormDataContent();
                        List <KeyValuePair <string, string> > FormDataKeyValues = new List <KeyValuePair <string, string> >();
                        for (int i = 0; i < GingerRequestMessage.RequestKeyValues.Count; i++)
                        {
                            if (GingerRequestMessage.RequestKeyValues[i].ValueType == eValueType.Text)
                            {
                                FormDataKeyValues.Add(new KeyValuePair <string, string>(GingerRequestMessage.RequestKeyValues[i].Param, GingerRequestMessage.RequestKeyValues[i].Value));
                                requestContent.Add(new StringContent(GingerRequestMessage.RequestKeyValues[i].Value), GingerRequestMessage.RequestKeyValues[i].Param);
                            }
                            if (GingerRequestMessage.RequestKeyValues[i].ValueType == eValueType.File)
                            {
                                requestContent.Add(GingerRequestMessage.RequestKeyValues[i].Content, GingerRequestMessage.RequestKeyValues[i].Param, GingerRequestMessage.RequestKeyValues[i].Filename);
                            }
                        }
                        GRM.RequestBodyString  = requestContent.ToString();
                        RequestMessage.Content = requestContent;
                    }
                    break;

                case eContentType.XML:
                    string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
                    if (BodyString.StartsWith(_byteOrderMarkUtf8))
                    {
                        var lastIndexOfUtf8 = _byteOrderMarkUtf8.Length - 1;
                        BodyString = BodyString.Remove(0, lastIndexOfUtf8);
                    }
                    RequestMessage.Content = new StringContent(BodyString, Encoding.UTF8, GingerRequestMessage.ContentType);
                    break;

                default:
                    RequestMessage.Content = new StringContent(BodyString, Encoding.UTF8, GingerRequestMessage.ContentType);
                    break;
                }
            }
        }
        private void PreparBasicRequest(GingerHttpRequestMessage GingerRequestMessage, GingerHttpResponseMessage GRM)
        {
            GRM.RequestBodyString = GingerRequestMessage.BodyString;

            Client.BaseAddress = GingerRequestMessage.URL;

            HttpMethod Method = new HttpMethod(GingerRequestMessage.Method.ToUpper());

            RequestMessage = new HttpRequestMessage(Method, Client.BaseAddress);
            SetContentType(GingerRequestMessage);
            foreach (KeyValuePair <string, string> header in GingerRequestMessage.Headers)
            {
                RequestMessage.Headers.TryAddWithoutValidation(header.Key, header.Value);
            }



            if (GingerRequestMessage.HttpVersion == ehttpVersion.HTTPV10)
            {
                RequestMessage.Version = HttpVersion.Version10;
            }
            else if
            (GingerRequestMessage.HttpVersion == ehttpVersion.HTTPV20)
            {
                RequestMessage.Version = HttpVersion.Version20;
            }
            else
            {
                RequestMessage.Version = HttpVersion.Version11;
            }


            SetCookies(GingerRequestMessage);
            SetRequestContent(Method, GingerRequestMessage, GRM);
        }