using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Net.Security; using WD7UVN_HFT_2023241.Models; namespace WD7UVN_HFT_2023241.Client.TUI { public class RestService { private static HttpClient client; private static bool Ping(string url) { try { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); WebClient wc = new WebClient(); wc.DownloadData(url); return true; } catch { return false; } } public static void Init(string baseurl = "https://localhost:5001", string pingableEndpoint = "/swagger") { int tries = 0; bool isOk = false; do { isOk = Ping(baseurl + pingableEndpoint); tries++; } while (isOk == false && tries < 5); if (isOk == false) { throw new EndpointNotAvailableException("Endpoint is not available!"); } HttpClientHandler handler = new HttpClientHandler(); handler.ClientCertificateOptions = ClientCertificateOption.Manual; handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) => { return true; }; client = new HttpClient(handler); client.BaseAddress = new Uri(baseurl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue ("application/json")); try { client.GetAsync("").GetAwaiter().GetResult(); } catch (HttpRequestException e) { Console.WriteLine(e.Message); throw new ArgumentException("Endpoint is not available!"); } } public static List Get(string endpoint) { List items = new List(); HttpResponseMessage response = client.GetAsync(endpoint).GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { items = response.Content.ReadAsAsync>().GetAwaiter().GetResult(); } else { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } return items; } public static T GetSingle(string endpoint) { T item = default(T); HttpResponseMessage response = client.GetAsync(endpoint).GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { item = response.Content.ReadAsAsync().GetAwaiter().GetResult(); } else { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } return item; } public static T Get(int id, string endpoint) { T item = default(T); HttpResponseMessage response = client.GetAsync(endpoint + id.ToString()).GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { item = response.Content.ReadAsAsync().GetAwaiter().GetResult(); } else { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } return item; } public static void Post(T item, string endpoint) { HttpResponseMessage response = client.PostAsJsonAsync(endpoint, item).GetAwaiter().GetResult(); if (!response.IsSuccessStatusCode) { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } response.EnsureSuccessStatusCode(); } public static void Delete(int id, string endpoint) { HttpResponseMessage response = client.DeleteAsync(endpoint + id.ToString()).GetAwaiter().GetResult(); if (!response.IsSuccessStatusCode) { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } response.EnsureSuccessStatusCode(); } public static void Put(T item, string endpoint) { HttpResponseMessage response = client.PutAsJsonAsync(endpoint, item).GetAwaiter().GetResult(); if (!response.IsSuccessStatusCode) { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } response.EnsureSuccessStatusCode(); } public static List WhoWorksInMaintainerTeam(int id) { var item = default(List); HttpResponseMessage response = client.GetAsync("/api/WhoWorksInMaintainerTeam?id=" + id.ToString()).GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { item = response.Content.ReadAsAsync>().GetAwaiter().GetResult(); } else { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } return item; } public static List GetSubordinates(int id) { var item = default(List); HttpResponseMessage response = client.GetAsync("/api/GetSubordinates?id=" + id.ToString()).GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { item = response.Content.ReadAsAsync>().GetAwaiter().GetResult(); } else { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } return item; } public static List WhoUsesService(int id) { var item = default(List); HttpResponseMessage response = client.GetAsync("/api/WhoUsesService?id=" + id.ToString()).GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { item = response.Content.ReadAsAsync>().GetAwaiter().GetResult(); } else { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } return item; } public static Employee WhoIsResponsibleForService(int id) { Employee item = default(Employee); HttpResponseMessage response = client.GetAsync("/api/WhoIsResponsibleForService?id=" + id.ToString()).GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { item = response.Content.ReadAsAsync().GetAwaiter().GetResult(); } else { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } return item; } public static List WhoMaintainsService(int id) { var item = default(List); HttpResponseMessage response = client.GetAsync("/api/WhoMaintainsService?id=" + id.ToString()).GetAwaiter().GetResult(); if (response.IsSuccessStatusCode) { item = response.Content.ReadAsAsync>().GetAwaiter().GetResult(); } else { var error = response.Content.ReadAsAsync().GetAwaiter().GetResult(); throw new ArgumentException(error.Msg); } return item; } } public class RestExceptionInfo { public RestExceptionInfo() { } public string Msg { get; set; } } public class EndpointNotAvailableException : Exception { public EndpointNotAvailableException() : base("The client could not reach the API endpoint.") { } public EndpointNotAvailableException(string message) : base(message) { } public EndpointNotAvailableException(string message, Exception innerException) : base(message, innerException) { } } }