public async Task <string> EpicorRequest(string jsonPayload, Uri endPoint, HttpMethod httpMethod)
        {
            HttpRequestMessage  epicorRequest  = null;
            HttpResponseMessage epicorResponse = null;

            try
            {
                epicorRequest         = new HttpRequestMessage(httpMethod, new Uri(EpicorClient.BaseAddress, endPoint));
                epicorRequest.Content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
                epicorResponse        = await EpicorClient.SendAsync(epicorRequest);

                if (epicorResponse.IsSuccessStatusCode)
                {
                    return(await epicorResponse.Content.ReadAsStringAsync());
                }
                else
                {
                    throw new EpicorAPIException(await epicorResponse.Content.ReadAsStringAsync(), jsonPayload);
                }
            }
            catch (EpicorAPIException epicorEx)
            {
                throw epicorEx;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                epicorRequest.Dispose();
                epicorResponse.Dispose();
            }
        }
        public async Task <string> GetWithODataOptions(ServiceEntity serviceEntity, string expandOptions = null, string selectOptions = null, string filterKey = null)
        {
            HttpRequestMessage  epicorRequest  = null;
            HttpResponseMessage epicorResponse = null;
            string oDataQueryString            = null;

            if (!string.IsNullOrEmpty(expandOptions))             //build OData query string depending on if some options are blank or not
            {
                oDataQueryString = "$expand=" + expandOptions;
            }
            if (!string.IsNullOrEmpty(selectOptions))
            {
                if (!string.IsNullOrEmpty(expandOptions))
                {
                    oDataQueryString += "&$select=" + selectOptions;
                }
                else
                {
                    oDataQueryString += "$select=" + selectOptions;
                }
            }
            if (!string.IsNullOrEmpty(filterKey))
            {
                if (!string.IsNullOrEmpty(expandOptions) || !string.IsNullOrEmpty(selectOptions))
                {
                    oDataQueryString += "&$filter=" + filterKey;
                }
                else
                {
                    oDataQueryString += "$filter=" + filterKey;
                }
            }
            try
            {
                epicorRequest = new HttpRequestMessage(HttpMethod.Get,                 //continued on next line
                                                       new Uri($"{serviceEntity.EntityService}?{oDataQueryString}", UriKind.Relative));
                epicorRequest.Headers.Add("Accept", "application/json");
                epicorResponse = await EpicorClient.SendAsync(epicorRequest);

                string contentString = await epicorResponse.Content.ReadAsStringAsync();

                if (epicorResponse.IsSuccessStatusCode)
                {
                    return(contentString);
                }
                else
                {
                    throw new EpicorAPIException(await epicorRequest.Content.ReadAsStringAsync(), await epicorResponse.Content.ReadAsStringAsync());
                }
            }
            catch (EpicorAPIException epicorEx)
            {
                throw epicorEx;
            }
            finally
            {
                epicorRequest.Dispose();
                epicorResponse.Dispose();
            }
        }
 protected virtual void Dispose(bool disposing)
 {
     if (disposed)
     {
         return;
     }
     if (disposing)
     {
         EpicorClient.Dispose();
         EpicorClientHandler.Dispose();
     }
     disposed = true;
 }