diff --git a/ClientProxyBase/ClientProxyBase.cs b/ClientProxyBase/ClientProxyBase.cs index 23de2c32..ff8b67f8 100644 --- a/ClientProxyBase/ClientProxyBase.cs +++ b/ClientProxyBase/ClientProxyBase.cs @@ -1,14 +1,17 @@ -using System; -using Newtonsoft.Json; +using Newtonsoft.Json; using SimpleResults; +using System; namespace ClientProxyBase; +using Shared.Results; using System.Collections; using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; using System.Threading; using System.Threading.Tasks; @@ -102,6 +105,110 @@ protected virtual ResponseData HandleResponseContent(String content) return JsonConvert.DeserializeObject>(content); } + protected virtual async Task> SendGetRequest(String uri, String accessToken, CancellationToken cancellationToken) + { + + HttpRequestMessage requestMessage = new(HttpMethod.Get, uri); + requestMessage.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationSchemes.Bearer, accessToken); + + // Make the Http Call here + HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken); + + // Process the response + Result result = await this.HandleResponseX(httpResponse, cancellationToken); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + TResponse responseData = JsonConvert.DeserializeObject(result.Data); + + return Result.Success(responseData); + } + + protected virtual async Task> SendPostRequest(String uri, String accessToken, TRequest content, CancellationToken cancellationToken) + { + + HttpRequestMessage requestMessage = new(HttpMethod.Post, uri); + requestMessage.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationSchemes.Bearer, accessToken); + requestMessage.Content = new StringContent(JsonConvert.SerializeObject(content), Encoding.UTF8, "application/json"); + + // Make the Http Call here + HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken); + + // Process the response + Result result = await this.HandleResponseX(httpResponse, cancellationToken); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + TResponse responseData = JsonConvert.DeserializeObject(result.Data); + + return Result.Success(responseData); + } + + protected virtual async Task> SendPutRequest(String uri, String accessToken, TRequest content, CancellationToken cancellationToken) + { + + HttpRequestMessage requestMessage = new(HttpMethod.Put, uri); + requestMessage.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationSchemes.Bearer, accessToken); + requestMessage.Content = new StringContent(JsonConvert.SerializeObject(content), Encoding.UTF8, "application/json"); + + // Make the Http Call here + HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken); + + // Process the response + Result result = await this.HandleResponseX(httpResponse, cancellationToken); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + TResponse responseData = JsonConvert.DeserializeObject(result.Data); + + return Result.Success(responseData); + } + + protected virtual async Task> SendPatchRequest(String uri, String accessToken, TRequest content, CancellationToken cancellationToken) + { + + HttpRequestMessage requestMessage = new(HttpMethod.Patch, uri); + requestMessage.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationSchemes.Bearer, accessToken); + requestMessage.Content = new StringContent(JsonConvert.SerializeObject(content), Encoding.UTF8, "application/json"); + + // Make the Http Call here + HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken); + + // Process the response + Result result = await this.HandleResponseX(httpResponse, cancellationToken); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + TResponse responseData = JsonConvert.DeserializeObject(result.Data); + + return Result.Success(responseData); + } + + protected virtual async Task> SendDeleteRequest(String uri, String accessToken, CancellationToken cancellationToken) + { + + HttpRequestMessage requestMessage = new(HttpMethod.Delete, uri); + requestMessage.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationSchemes.Bearer, accessToken); + + // Make the Http Call here + HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken); + + // Process the response + Result result = await this.HandleResponseX(httpResponse, cancellationToken); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + TResponse responseData = JsonConvert.DeserializeObject(result.Data); + + return Result.Success(responseData); + } + + #endregion } @@ -110,4 +217,8 @@ public ClientHttpException(string? message, Exception? innerException = null) : base(message, innerException) { } +} + +public static class AuthenticationSchemes { + public static readonly String Bearer = "Bearer"; } \ No newline at end of file