using System.Text; using System.Text.Json; namespace HealthcareManagerUI.Services.Http; public class RequestHttpService : IRequestHttpService { private readonly string _apiKey; public RequestHttpService(IConfiguration configuration) { _apiKey = configuration.GetValue("ApiKey") ?? "NoKey"; } public async Task GetAsync(string uri, IDictionary headers = null) { using var httpClient = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, uri); AddHeaders(request, headers); var response = await httpClient.SendAsync(request); var responseContent = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize( responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); } public async Task GetByIdAsync(string uri, int id, IDictionary headers = null) { return await GetAsync($"{uri}/{id}", headers); } public async Task PostAsync(string uri, object data, IDictionary headers = null) { using var httpClient = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, uri); AddHeaders(request, headers); request.Content = new StringContent(JsonSerializer.Serialize(data), Encoding.UTF8, "application/json"); var response = await httpClient.SendAsync(request); var responseContent = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize( responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); } public async Task PutAsync(string uri, int id, object data, IDictionary headers = null) { using var httpClient = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Put, $"{uri}/{id}"); AddHeaders(request, headers); request.Content = new StringContent(JsonSerializer.Serialize(data), Encoding.UTF8, "application/json"); var response = await httpClient.SendAsync(request); var responseContent = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize( responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); } public async Task DeleteAsync(string uri, int id, IDictionary headers = null) { using var httpClient = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Delete, $"{uri}/{id}"); AddHeaders(request, headers); var response = await httpClient.SendAsync(request); } private void AddHeaders(HttpRequestMessage request, IDictionary headers) { // Add the API key header to every request request.Headers.Add("ApiKey", _apiKey); if (headers != null) { foreach (var header in headers) { request.Headers.Add(header.Key, header.Value); } } } }