From f8d23a7cbc41fff320b97fad53e941a00fc77cc8 Mon Sep 17 00:00:00 2001 From: TypoMustakes Date: Tue, 5 Dec 2023 15:29:00 +0100 Subject: [PATCH] Adding REST services as seen on nikprog.hu --- WD7UVN_HFT_2023241.Client/RestService.cs | 153 +++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 WD7UVN_HFT_2023241.Client/RestService.cs diff --git a/WD7UVN_HFT_2023241.Client/RestService.cs b/WD7UVN_HFT_2023241.Client/RestService.cs new file mode 100644 index 0000000..e45c0db --- /dev/null +++ b/WD7UVN_HFT_2023241.Client/RestService.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Http; + +namespace WD7UVN_HFT_2023241.Client +{ + class RestService + { + HttpClient client; + + public RestService(string baseurl, string pingableEndpoint = "api") + { + bool isOk = false; + do + { + isOk = Ping(baseurl + pingableEndpoint); + } while (isOk == false); + Init(baseurl); + } + + private bool Ping(string url) + { + try + { + WebClient wc = new WebClient(); + wc.DownloadData(url); + return true; + } + catch + { + return false; + } + } + + private void Init(string baseurl) + { + client = new HttpClient(); + 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) + { + throw new ArgumentException("Endpoint is not available!"); + } + + } + + public 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 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 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 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 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 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 class RestExceptionInfo + { + public RestExceptionInfo() + { + + } + public string Msg { get; set; } + } +}