/// <summary>
        ///
        /// </summary>
        /// <typeparam name="T">the type of the Model e.g. UserModel</typeparam>
        /// <param name="baseUrl">BaseURL is the baseUrl of your API. For example, http://something.com/</param>
        /// <param name="endpoint">for example, api/PUTUsers</param>
        /// <param name="content">the model you are sending through to the API</param>
        /// <param name="parameters">Parameters for a specific endpoint, set as null if  they are no parameters<</param>
        /// <param name="token">token for auth. No need to pass Bearer Token, just pass token only.</param>
        /// <returns>the API json string</returns>
        public static async Task <string> PutAsync <T>(string baseUrl, string endpoint, T content = default(T), Dictionary <string, string> parameters = null, string token = null)
        {
            if (!CrossConnectivity.Current.IsConnected)
            {
                return(null);
            }
            try
            {
                using (var client = new HttpClient())
                {
                    client.Timeout = TimeSpan.FromSeconds(60);
                    if (token != null)
                    {
                        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
                    }
                    client.DefaultRequestHeaders.Add("Accept", "application/json");
                    // client.DefaultRequestHeaders.Add("Content-Type", "application/json");
                    string parameter = string.Empty;

                    string serialized = string.Empty;
                    client.BaseAddress = new Uri(baseUrl);
                    if (parameters != null)
                    {
                        parameter = parameters.Aggregate(parameter, (current, keyvalue) => current + $"{keyvalue.Key}={keyvalue.Value}&");
                    }

                    string uriLink = $"{client.BaseAddress.AbsoluteUri}{endpoint}?{parameter}";
                    if (content != null && content as string != string.Empty)
                    {
                        serialized = DeserializationService.Serialize(content);
                    }

                    HttpContent httpContent = new StringContent(serialized, Encoding.UTF8, "application/json");
                    var         s           = await client.PutAsync(uriLink.Replace(',', '.'), httpContent);

                    if (s.IsSuccessStatusCode)
                    {
                        var response = await s.Content.ReadAsStringAsync();

                        return(response);
                    }
                    return(null);
                }
            }
            catch (Exception)
            {
                return(null);
            }
        }
        /// <summary>
        /// PostAsync with Auth and formurlencoded for logging in.
        /// </summary>
        /// <typeparam name="T">the type of the Model e.g. UserModel</typeparam>
        /// <param name="baseUrl">BaseURL is the baseUrl of your API. For example, http://something.com/</param>
        /// <param name="endpoint">for example, api/PostUsers</param>
        /// <param name="content">the model you are sending through to the API.</param>
        /// <param name="formUrlEncoded">Incase you need to use it for logging in.... Leave as null if the POST is not a login</param>
        /// <param name="parameters">Parameters for a specific endpoint, set as null if  they are no parameters</param>
        /// <param name="token">token for auth. No need to pass Bearer Token, just pass token only.</param>
        /// <returns>the API json string</returns>
        public static async Task <string> PostAsync <T>(string baseUrl, string endpoint, T content = default(T), Dictionary <string, string> formUrlEncoded = null, Dictionary <string, string> parameters = null, string token = null)
        {
            if (!CrossConnectivity.Current.IsConnected)
            {
                return(null);
            }
            HttpClientHandler handler = new HttpClientHandler()
            {
                AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
            };

            try
            {
                using (var client = new HttpClient(handler))
                {
                    client.Timeout = TimeSpan.FromSeconds(60);
                    if (token != null)
                    {
                        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
                    }
                    client.DefaultRequestHeaders.Add("Accept", "application/json");
                    // client.DefaultRequestHeaders.Add("Content-Type", "application/json");
                    string parameter   = string.Empty;
                    string formencoded = string.Empty;
                    string serialized  = string.Empty;
                    client.BaseAddress = new Uri(baseUrl);
                    if (parameters != null)
                    {
                        parameter = parameters.Aggregate(parameter, (current, keyvalue) => current + $"{keyvalue.Key}={keyvalue.Value}&");
                    }
                    if (formUrlEncoded != null)
                    {
                        formencoded = formUrlEncoded.Aggregate(formencoded, (current, keyvalue) => current + $"{keyvalue.Key}={keyvalue.Value}&");
                        serialized  = formencoded;
                    }

                    string uriLink = $"{client.BaseAddress.AbsoluteUri}{endpoint}?{parameter}";
                    if (content != null && content as string != string.Empty)
                    {
                        serialized = DeserializationService.Serialize(content);//
                    }

                    HttpContent httpContent = new StringContent(serialized, Encoding.UTF8, string.IsNullOrEmpty(formencoded) ? "application/json" : "application/x-www-form-urlencoded");
                    var         s           = await client.PostAsync(uriLink.Replace(',', '.'), httpContent);

                    if (s.IsSuccessStatusCode)
                    {
                        var response = await s.Content.ReadAsStringAsync();

                        return(response);
                    }

                    Debug.WriteLine(await s.Content.ReadAsStringAsync());
                    return(null);
                }
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception.Message);
                return(null);
            }
        }