more work on api

This commit is contained in:
2024-08-15 15:51:23 +02:00
parent c24b460a0d
commit f57aef5f4f
6 changed files with 112 additions and 47 deletions

View File

@@ -1,9 +1,41 @@
namespace Pilz.Networking.Api;
public class ApiClient : IApiClient
public class ApiClient(string apiUrl) : IApiClient
{
public void MakeRequest<T>(string url, T message) where T : ApiMessage
protected readonly HttpClient httpClient = new();
public string ApiUrl { get; } = apiUrl;
public IMessageSerializer Serializer { get; set; } = new DefaultMessageSerializer();
public virtual async Task<ApiResponse> SendMessage<TResponse>(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<ApiResponse<TResponse>> SendRequest<TResponse>(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<HttpResponseMessage> 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);
}
}