diff --git a/Gameboard.ShogiUI.Sockets/Repositories/GameboardRepository.cs b/Gameboard.ShogiUI.Sockets/Repositories/GameboardRepository.cs index 96c3e44..54f7143 100644 --- a/Gameboard.ShogiUI.Sockets/Repositories/GameboardRepository.cs +++ b/Gameboard.ShogiUI.Sockets/Repositories/GameboardRepository.cs @@ -1,10 +1,10 @@ using Gameboard.Shogi.Api.ServiceModels.Messages; +using Gameboard.ShogiUI.Sockets.Repositories.Utility; using Newtonsoft.Json; using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; -using Gameboard.ShogiUI.Sockets.Repositories.Utility; namespace Gameboard.ShogiUI.Sockets.Repositories { @@ -73,7 +73,7 @@ namespace Gameboard.ShogiUI.Sockets.Repositories { var uri = $"Session/{gameName}/Join"; var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); - var response = await client.PostAsync(Uri.EscapeUriString(uri), content); + var response = await client.PutAsync(Uri.EscapeUriString(uri), content); var json = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(json); } diff --git a/Gameboard.ShogiUI.Sockets/Repositories/Utility/AuthenticatedHttpClient.cs b/Gameboard.ShogiUI.Sockets/Repositories/Utility/AuthenticatedHttpClient.cs index a25c7d7..07a3df4 100644 --- a/Gameboard.ShogiUI.Sockets/Repositories/Utility/AuthenticatedHttpClient.cs +++ b/Gameboard.ShogiUI.Sockets/Repositories/Utility/AuthenticatedHttpClient.cs @@ -13,6 +13,7 @@ namespace Gameboard.ShogiUI.Sockets.Repositories.Utility Task DeleteAsync(string requestUri); Task GetAsync(string requestUri); Task PostAsync(string requestUri, HttpContent content); + Task PutAsync(string requestUri, HttpContent content); } public class AuthenticatedHttpClient : HttpClient, IAuthenticatedHttpClient @@ -31,7 +32,6 @@ namespace Gameboard.ShogiUI.Sockets.Repositories.Utility clientSecret = configuration["AppSettings:ClientSecret"]; BaseAddress = new Uri(configuration["AppSettings:GameboardShogiApi"]); } - private async Task RefreshBearerToken() { var disco = await this.GetDiscoveryDocumentAsync(identityServerUrl); @@ -56,7 +56,23 @@ namespace Gameboard.ShogiUI.Sockets.Repositories.Utility logger.LogInformation("Refreshing Bearer Token to {BaseAddress}", BaseAddress); this.SetBearerToken(tokenResponse.AccessToken); } - + public async new Task PutAsync(string requestUri, HttpContent content) + { + var response = await base.PutAsync(requestUri, content); + if (response.StatusCode == HttpStatusCode.Unauthorized) + { + await RefreshBearerToken(); + response = await base.PostAsync(requestUri, content); + } + logger.LogInformation( + "Repository PUT to {BaseUrl}{RequestUrl} \n\tRespCode: {RespCode} \n\tRequest: {Request}\n\tResponse: {Response}\n", + BaseAddress, + requestUri, + response.StatusCode, + await content.ReadAsStringAsync(), + await response.Content.ReadAsStringAsync()); + return response; + } public async new Task GetAsync(string requestUri) { var response = await base.GetAsync(requestUri);