public virtual async Task <APIStandardResponse <TResponse> > RequestAsync <TResponse>(RequestMethod requestMethod, string url, APIRequestBaseModel requestParameters)
 {
     return(await BasicConsumeAPI <TResponse>(requestMethod, url, requestParameters, GetHttpClient()));
 }
        protected virtual async Task <APIStandardResponse <TResponse> > BasicConsumeAPI <TResponse>(RequestMethod requestMethod, string requestURL, APIRequestBaseModel requestParams, System.Net.Http.HttpClient httpClientAsync)
        {
            Exception exception = null;
            APIStandardResponse <TResponse> aPIStandardResponse = (APIStandardResponse <TResponse>)Activator.CreateInstance(typeof(APIStandardResponse <TResponse>));

            try
            {
                using (var cts = new CancellationTokenSource())
                {
                    using (var httpClient = httpClientAsync)
                    {
                        httpClient.Timeout = TimeSpan.FromSeconds(Utils.API_REQUEST_TIMEOUT);

                        HttpResponseMessage httpResponse = null;

                        /*
                         * Process with GET Method
                         */
                        if (requestMethod == RequestMethod.GET)
                        {
                            var paramete = requestParams.Get_GetParamsRequest();
                            httpResponse = await httpClient.GetAsync(requestURL + paramete, cts.Token);
                        }

                        /*
                         * Process with POST Method
                         */
                        else if (requestMethod == RequestMethod.POST)
                        {
                            var paramete = requestParams.Get_PostParamsRequest();
                            httpResponse = await httpClient.PostAsync(requestURL, new StringContent(paramete, Encoding.UTF8, "application/json"), cts.Token);
                        }

                        /*
                         * Process with PUT Method
                         */
                        else if (requestMethod == RequestMethod.PUT)
                        {
                            var paramete = requestParams.Get_PutParamsRequest();
                            httpResponse = await httpClient.PutAsync(requestURL, new StringContent(paramete, Encoding.UTF8, "application/json"), cts.Token);
                        }

                        /*
                         * Process reponse after request
                         */


                        if (httpResponse != null)
                        {
                            aPIStandardResponse.ObjectRaw = httpResponse.Content.ReadAsStringAsync().Result;

                            if (httpResponse.IsSuccessStatusCode)
                            {
                                aPIStandardResponse.RequestOK = true;

                                aPIStandardResponse.ObjectSuccess = await Task.Run(() =>
                                {
                                    var result = JsonConvert.DeserializeObject <TResponse>(aPIStandardResponse.ObjectRaw, jsonSerializerSettings);
                                    aPIStandardResponse.JsonConvertSuccess = true;
                                    return(result);
                                });
                            }
                            else
                            {
                                aPIStandardResponse.StatusCode = httpResponse.StatusCode;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                exception = ex;
                DebugMessage(ex.StackTrace, "ParseJsonError");
            }

            if (exception == null)
            {
                /*
                 * Request successfully and return data
                 */
                return(aPIStandardResponse);
            }
            else
            {
                /*
                 * Request error and return default object of reponse model
                 */
                return(aPIStandardResponse);
            }
        }
 public virtual async Task <APIStandardResponse <TResponse> > RequestPutAsync <TResponse>(string url, APIRequestBaseModel requestParameters)
 {
     return(await RequestAsync <TResponse>(RequestMethod.PUT, url, requestParameters));
 }