public T GetData <T>(string endpointUrl)
        {
            HttpWebRequest webRequest = WebRequest.CreateHttp(SiteUrl + endpointUrl);

            webRequest.Accept = Accept;
            AuthorizationHelper.AuthenticateRequest(webRequest);
            WebResponse response = webRequest.GetResponse();

            return(DeserializeResponse <T>(response));
        }
        public T PostData <T, U>(string endpointUrl, U data, Dictionary <string, string> additionalHeaders = null)
        {
            HttpWebRequest webRequest = WebRequest.CreateHttp(SiteUrl + endpointUrl);

            webRequest.Method      = "POST";
            webRequest.Accept      = Accept;
            webRequest.ContentType = ContentType;
            if (additionalHeaders != null)
            {
                foreach (var header in additionalHeaders)
                {
                    webRequest.Headers.Add(header.Key, header.Value);
                }
            }
            if (data != null)
            {
                string serializedRequest = SerializeRequest(data);
                using (Stream requestStream = webRequest.GetRequestStream())
                {
                    using (StreamWriter writer = new StreamWriter(requestStream))
                    {
                        writer.Write(serializedRequest);
                    }
                }
            }
            else
            {
                webRequest.ContentLength = 0;
            }

            AuthorizationHelper.AuthenticateRequest(webRequest);
            try
            {
                WebResponse response = webRequest.GetResponse();
                return(DeserializeResponse <T>(response));
            }
            catch (WebException wEx)
            {
                using (Stream exStream = wEx.Response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(exStream))
                    {
                        throw new Exception("Server returned " + wEx.Status.ToString(), new Exception(reader.ReadToEnd()));
                    }
                }
            }
            catch (Exception ex)
            {
                return(default(T));
            }
        }