public ServerCredentials(string name, string password, string site)
 {
     Name     = name;
     Password = password;
     Site     = new ServerSite
     {
         ContentUrl = site
     };
 }
        private async Task <ServerSite> GetSiteAsync(string site)
        {
            LogOnError = false;
            ServerSite serverSite = new ServerSite();

            if (LogOn.Token == null)
            {
                await LogOnAsync(site);
            }
            else if (LogOn.Site.ContentUrl != site)
            {
                await SwitchSiteAsync(site);
            }

            if (LogOnError)
            {
                throw new Exception(ErrorMessage);
            }
            else
            {
                Client.DefaultRequestHeaders.Remove("X-Tableau-Auth");
                Client.DefaultRequestHeaders.TryAddWithoutValidation("X-Tableau-Auth", LogOn.Token);

                var request = new HttpRequestMessage(HttpMethod.Get, $"3.3/sites/{site}?key=contentUrl");

                try
                {
                    using (var response = await Client.SendAsync(request))
                    {
                        if (response.IsSuccessStatusCode)
                        {
                            var l = await response.Content.ReadAsAsync <Site>();

                            serverSite = l.SiteDetails;
                        }
                        else
                        {
                            LogOnError = true;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                request.Dispose();
            }
            return(serverSite);
        }
        private async Task <ServerSite> CreateSiteAsync(string site, string name)
        {
            LogOnError = false;
            ServerSite serverSite = new ServerSite();

            if (LogOn.Token == null)
            {
                await LogOnAsync();
            }

            if (LogOnError)
            {
                throw new Exception(ErrorMessage);
            }

            var newSite = new NewSite
            {
                SiteDetails = new ServerSite
                {
                    Name       = name,
                    ContentUrl = site,
                    AdminMode  = "ContentOnly"
                }
            };

            string content = ToXML(newSite, "tsRequest");

            Client.DefaultRequestHeaders.Remove("X-Tableau-Auth");
            Client.DefaultRequestHeaders.TryAddWithoutValidation("X-Tableau-Auth", LogOn.Token);

            var request = new HttpRequestMessage(HttpMethod.Post, "3.3/sites")
            {
                Content = new StringContent(content, Encoding.UTF8, "application/xml")
            };

            try
            {
                using (var response = await Client.SendAsync(request))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        var l = await response.Content.ReadAsAsync <NewSite>();
                        await SwitchSiteAsync(l.SiteDetails.ContentUrl);

                        serverSite = l.SiteDetails;
                    }
                    else
                    {
                        var message = await response.Content.ReadAsStringAsync();

                        ErrorMessage = message;

                        StatusCode   = response.StatusCode.ToString();
                        ReasonPhrase = response.ReasonPhrase;
                        LogOnError   = true;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            request.Dispose();

            return(serverSite);
        }