42 lines
1.5 KiB
C#
42 lines
1.5 KiB
C#
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<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);
|
|
}
|
|
}
|