namespace Pilz.Networking.Api; public class ApiClient(string apiUrl) : IApiClient { protected readonly HttpClient httpClient = new(); public string ApiUrl { get; } = apiUrl; public IMessageSerializer Serializer { get; set; } = new DefaultMessageSerializer(); public virtual async Task SendMessage(string url, ApiMessage message, IMessageSerializer? serializer) { serializer ??= Serializer; //message.AuthSecret = AuthSecret; var res = await Send(url, message, serializer); return new(res.StatusCode); } public virtual async Task> SendRequest(string url, ApiMessage message, IMessageSerializer? serializer) where TResponse : ApiMessage { serializer ??= Serializer; //message.AuthSecret = AuthSecret; var res = await Send(url, message, serializer); TResponse? result = null; if (res.IsSuccessStatusCode) result = serializer.Deserialize(await res.Content.ReadAsStringAsync(), typeof(TResponse)) as TResponse; return new(res.StatusCode, result); } protected virtual async Task Send(string url, ApiMessage message, IMessageSerializer serializer) { var fullRequestUrl = ApiUrl + url; var content = new StringContent(serializer.Serialize(message)!, null, "application/json"); return await httpClient.PostAsync(fullRequestUrl, content); } }