Obtener Access Token solo si expiró

mail@pastecode.io avatar
unknown
csharp
a year ago
1.8 kB
20
Indexable
Never
public class PrimaxConnectionsClient
{
    private AccessTokenResponse _accessTokenResponse;
	private string _accessToken;
    private DateTime _accessTokenExpirationTime;

	// Método para obtener el token
    public async Task<string> GetAccessTokenAsync()
    {
        if (_accessToken == null || DateTime.Now >= _accessTokenExpirationTime)
        {
			// GetAccessTokenFromAPI() invoca internamente al endpoint de Primax Connections
            _accessTokenResponse = await GetAccessTokenFromAPI();
			
            _accessToken = _accessTokenResponse.AccessToken;
            
			// Establecer la vigencia del token en función de la respuesta de la API
            _accessTokenExpirationTime = DateTime.Now.AddSeconds(_accessTokenResponse.ExpirationTimeInSeconds);
        }

        return _accessToken;
    }

    public async Task<string> InvokeAPIEndpointAsync(string endpoint)
    {
        // Obtener el access token válido.
        string accessToken = await GetAccessTokenAsync();

        // Realizar la solicitud a la API de terceros.
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

            // Realizar solicitud a Primax Connections y procesar la respuesta.
            HttpResponseMessage response = await client.GetAsync(endpoint);
            if (response.IsSuccessStatusCode)
            {
                string responseBody = await response.Content.ReadAsStringAsync();
                return responseBody;
            }
            else
            {
                throw new Exception($"Error en la solicitud: {response.StatusCode} - {response.ReasonPhrase}");
            }
        }
    }
}