using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace HttpBasicClient
{
    class Program
    {
        static void Main(string[] args)
        {

            // Allen SSL-Zertifikaten vertrauen;
            // Hilft beim Testen beim Umgang mit selbst ausgestellten Zertifikaten.
            // Sollte im Produktiveinsatz NICHT verwendet werden!
            ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
            {
                return true;
            };

            CallService("https://localhost");
            Console.WriteLine("Fertig!");
            Console.ReadLine();
        }

        private static async Task CallService(string baseUrl)
        {
            string credentials = EncodeBase64("max:geheim");
            var url = baseUrl + "/api/secure";

            var client = new HttpClient();
            
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);

            try
            {
                var response = await client.GetAsync(url);
                if (!response.IsSuccessStatusCode) throw new Exception("Anfrage war nicht erfolgreich!");
                var resultString = await response.Content.ReadAsStringAsync();
                Console.WriteLine(resultString);
            }
            catch (Exception e)
            {
                Console.WriteLine("Fehler: " + e.Message);
            }
            
        }

        private static string EncodeBase64(string unpwd)
        {
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(unpwd));
        }
    }
}
