Files
FACULTATE-HEALTHCARE_MANAGER/frontend/HealthcareManagerUI/Services/Http/RequestHttpService.cs
T

83 lines
3.0 KiB
C#

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<string>("ApiKey") ?? "NoKey";
}
public async Task<T> GetAsync<T>(string uri, IDictionary<string, string> 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<T>(
responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
}
public async Task<T> GetByIdAsync<T>(string uri, int id, IDictionary<string, string> headers = null)
{
return await GetAsync<T>($"{uri}/{id}", headers);
}
public async Task<T> PostAsync<T>(string uri, object data, IDictionary<string, string> 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<T>(
responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
}
public async Task<T> PutAsync<T>(string uri, int id, object data, IDictionary<string, string> 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<T>(
responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
}
public async Task DeleteAsync(string uri, int id, IDictionary<string, string> 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<string, string> 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);
}
}
}
}