83 lines
3.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |