public static async Task <TResult> PostStreamAsync <TResult>(this GeneralHttpClient apiClient, string path, object data, string contentType = CustomMediaTypeNames.FormData)
        {
            IDictionary <string, object> dataArray;

            if (data is Dictionary <string, object> )
            {
                dataArray = data as Dictionary <string, object>;
            }
            else
            {
                dataArray = data.ToDictionary();
            }

            HttpContent httpContent;

            switch (contentType)
            {
            case CustomMediaTypeNames.FormDataCompress:
            case CustomMediaTypeNames.FormData:
                httpContent = new MultipartFormDataContent();
                foreach (var dataItem in dataArray)
                {
                    byte[] byteArrary;
                    if (contentType == CustomMediaTypeNames.FormDataCompress)
                    {
                        byteArrary = Util.Compress(Util.Compress(Util.ConvertObjectToByteArray(dataItem.Value)));
                    }
                    else
                    {
                        byteArrary = Util.ConvertObjectToByteArray(dataItem.Value);
                    }

                    ByteArrayContent byteArrayContent = new ByteArrayContent(byteArrary);
                    byteArrayContent.Headers.ContentType = new MediaTypeHeaderValue(CustomMediaTypeNames.OctetStream);
                    ((MultipartFormDataContent)httpContent).Add(byteArrayContent, dataItem.Key, dataItem.Key);

                    if (contentType == CustomMediaTypeNames.FormDataCompress)
                    {
                        httpContent.Headers.Add("Compress", "true");
                    }
                }
                break;

            default:
                httpContent = new StringContent("no content");
                break;
            }

            var result = await apiClient.ExecuteAsync <TResult>(HttpMethod.Post, path, httpContent, contentType);

            return(result);
        }
 /// <summary> POST request to api, path is relative or root</summary>
 public static TResult Post <TResult>(this GeneralHttpClient apiClient, string path, object data, string contentType = null)
 {
     return(apiClient.Execute <TResult>(HttpMethod.Post, path, data, contentType));
 }
 /// <summary> DELETE ASYNC request to api with SaveChanges, path is relative or root</summary>
 public static Task <TResult> DeleteAsync <TResult>(this GeneralHttpClient apiClient, string path, object data, string contentType = null)
 {
     return(apiClient.ExecuteAsync <TResult>(HttpMethod.Delete, path, data, contentType));
 }
 /// <summary> GET ASYNC request to api, path is relative or root, path is relative or root</summary>
 public static Task <TResult> GetAsync <TResult>(this GeneralHttpClient apiClient, string path)
 {
     return(apiClient.ExecuteAsync <TResult>(HttpMethod.Get, path, null));
 }
        /// <summary> ASYNC COMPRESS POST request to api, path is relative or root</summary>
        public static async Task <TResult> PostCompressAsync <TResult>(this GeneralHttpClient apiClient, string path, object data)
        {
            var result = await apiClient.ExecuteAsync <TResult>(HttpMethod.Post, path, data, CustomMediaTypeNames.CrpmZip);

            return(result);
        }