using System; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using IF.Lastfm.Core.Api.Enums; using IF.Lastfm.Core.Api.Helpers; namespace IF.Lastfm.Core.Api.Commands { public abstract class GetAsyncCommandBase : LastAsyncCommandBase where T : LastResponse, new() { protected GetAsyncCommandBase(IAuth auth) { Auth = auth; } public async override Task ExecuteAsync() { SetParameters(); EscapeParameters(); Url = BuildRequestUrl(); try { var httpClient = new HttpClient(); var response = await httpClient.GetAsync(Url); return await HandleResponse(response); } catch (HttpRequestException) { if (LastFm.CatchRequestExceptions) { return LastResponse.CreateErrorResponse(LastFmApiError.RequestFailed); } else { throw; } } } protected override Uri BuildRequestUrl() { var apiUrl = LastFm.FormatApiUrl(Method, Auth.ApiKey, Parameters); return new Uri(apiUrl, UriKind.Absolute); } private void EscapeParameters() { foreach (var key in Parameters.Keys.ToList()) { Parameters[key] = Uri.EscapeDataString(Parameters[key]); } } } }