Changed command structure to reduce repetition

This commit is contained in:
Rikki Tooley 2013-09-01 20:52:44 +01:00
parent 73e1831986
commit db00dfd8ed
23 changed files with 150 additions and 243 deletions

View File

@ -19,16 +19,11 @@ public AddShoutCommand(IAuth auth, string album, string artist, string message)
Message = message; Message = message;
} }
public async override Task<LastResponse> ExecuteAsync() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("album", Album);
{ Parameters.Add("artist", Artist);
{"album", Album}, Parameters.Add("message", Message);
{"artist", Artist},
{"message", Message}
};
return await ExecuteInternal(parameters);
} }
public async override Task<LastResponse> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse> HandleResponse(HttpResponseMessage response)

View File

@ -23,19 +23,13 @@ public GetAlbumInfoCommand(IAuth auth, string artistname, string albumname) : ba
AlbumName = albumname; AlbumName = albumname;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("artist", ArtistName);
{ Parameters.Add("album", AlbumName);
{"artist", Uri.EscapeDataString(ArtistName)}, Parameters.Add("autocorrect", Convert.ToInt32(Autocorrect).ToString());
{"album", Uri.EscapeDataString(AlbumName)},
{"autocorrect", Convert.ToInt32(Autocorrect).ToString()}
};
base.DisableCaching(parameters); base.DisableCaching();
var apiUrl = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(apiUrl, UriKind.Absolute);
} }
public async override Task<LastResponse<Album>> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse<Album>> HandleResponse(HttpResponseMessage response)

View File

@ -25,22 +25,16 @@ public GetAlbumShoutsCommand(IAuth auth, string albumname, string artistname)
ArtistName = artistname; ArtistName = artistname;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("album", AlbumName);
{ Parameters.Add("artist", ArtistName);
{"album", Uri.EscapeDataString(AlbumName)}, Parameters.Add("autocorrect", Convert.ToInt32(Autocorrect).ToString());
{"artist", Uri.EscapeDataString(ArtistName)},
{"autocorrect", Convert.ToInt32(Autocorrect).ToString()}
};
base.AddPagingParameters(parameters); base.AddPagingParameters();
base.DisableCaching(parameters); base.DisableCaching();
var apiUrl = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(apiUrl, UriKind.Absolute);
} }
public async override Task<PageResponse<Shout>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<Shout>> HandleResponse(HttpResponseMessage response)
{ {
string json = await response.Content.ReadAsStringAsync(); string json = await response.Content.ReadAsStringAsync();

View File

@ -17,15 +17,10 @@ public AddShoutCommand(IAuth auth, string artist, string message) : base(auth)
Message = message; Message = message;
} }
public async override Task<LastResponse> ExecuteAsync() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("artist", Artist);
{ Parameters.Add("message", Message);
{"artist", Artist},
{"message", Message}
};
return await ExecuteInternal(parameters);
} }
public async override Task<LastResponse> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse> HandleResponse(HttpResponseMessage response)

View File

@ -24,18 +24,15 @@ public GetArtistInfoCommand(IAuth auth, string artistname)
ArtistName = artistname; ArtistName = artistname;
} }
public override Uri BuildRequestUrl() /// <summary>
/// TODO Bio language
/// </summary>
public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("artist", ArtistName);
{ Parameters.Add("autocorrect", Convert.ToInt32(Autocorrect).ToString());
{"artist", Uri.EscapeDataString(ArtistName)},
{"autocorrect", Convert.ToInt32(Autocorrect).ToString()}
};
base.DisableCaching(parameters); base.DisableCaching();
var apiUrl = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(apiUrl, UriKind.Absolute);
} }
public async override Task<LastResponse<Artist>> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse<Artist>> HandleResponse(HttpResponseMessage response)

View File

@ -1,6 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Enums; using IF.Lastfm.Core.Api.Enums;
@ -11,7 +9,7 @@
namespace IF.Lastfm.Core.Api.Commands.ArtistApi namespace IF.Lastfm.Core.Api.Commands.ArtistApi
{ {
internal class GetArtistShoutsCommand : GetAsyncCommandBase<PageResponse<Shout>> public class GetArtistShoutsCommand : GetAsyncCommandBase<PageResponse<Shout>>
{ {
public string ArtistName { get; set; } public string ArtistName { get; set; }
public bool Autocorrect { get; set; } public bool Autocorrect { get; set; }
@ -23,22 +21,16 @@ public GetArtistShoutsCommand(IAuth auth, string artistname)
ArtistName = artistname; ArtistName = artistname;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("artist", ArtistName);
{ Parameters.Add("autocorrect", Convert.ToInt32(Autocorrect).ToString());
{"artist", Uri.EscapeDataString(ArtistName)},
{"autocorrect", Convert.ToInt32(Autocorrect).ToString()}
};
base.AddPagingParameters(parameters); base.AddPagingParameters();
base.DisableCaching(parameters); base.DisableCaching();
var apiUrl = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(apiUrl, UriKind.Absolute);
} }
public async override Task<PageResponse<Shout>> HandleResponse(HttpResponseMessage response) public override async Task<PageResponse<Shout>> HandleResponse(HttpResponseMessage response)
{ {
string json = await response.Content.ReadAsStringAsync(); string json = await response.Content.ReadAsStringAsync();
@ -54,7 +46,5 @@ public async override Task<PageResponse<Shout>> HandleResponse(HttpResponseMessa
return PageResponse<Shout>.CreateErrorResponse(error); return PageResponse<Shout>.CreateErrorResponse(error);
} }
} }
} }
} }

View File

@ -1,29 +1,24 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace IF.Lastfm.Core.Api.Commands namespace IF.Lastfm.Core.Api.Commands
{ {
internal abstract class GetAsyncCommandBase<T> : IAsyncCommand<T> public abstract class GetAsyncCommandBase<T> : LastAsyncCommandBase<T>
{ {
public string Method { get; protected set; }
public Uri Url { get; protected set; }
public IAuth Auth { get; protected set; }
public int Page { get; set; }
public int Count { get; set; }
protected GetAsyncCommandBase(IAuth auth) protected GetAsyncCommandBase(IAuth auth)
{ {
Auth = auth; Auth = auth;
} }
public abstract Uri BuildRequestUrl(); public async override Task<T> ExecuteAsync()
public async Task<T> ExecuteAsync()
{ {
SetParameters();
EscapeParameters();
Url = BuildRequestUrl(); Url = BuildRequestUrl();
var httpClient = new HttpClient(); var httpClient = new HttpClient();
@ -31,22 +26,18 @@ public async Task<T> ExecuteAsync()
return await HandleResponse(response); return await HandleResponse(response);
} }
public abstract Task<T> HandleResponse(HttpResponseMessage response); protected override Uri BuildRequestUrl()
protected void AddPagingParameters(Dictionary<string, string> parameters)
{ {
parameters.Add("page", Page.ToString()); var apiUrl = LastFm.FormatApiUrl(Method, Auth.ApiKey, Parameters);
parameters.Add("limit", Count.ToString()); return new Uri(apiUrl, UriKind.Absolute);
} }
/// <summary> private void EscapeParameters()
/// Annoying workaround for Windows Phone's caching...
/// see http://stackoverflow.com/questions/6334788/windows-phone-7-webrequest-caching
/// </summary>
/// <param name="parameters"></param>
protected void DisableCaching(Dictionary<string, string> parameters)
{ {
parameters.Add("disablecachetoken", DateTime.UtcNow.Ticks.ToString()); foreach (var key in Parameters.Keys.ToList())
{
Parameters[key] = Uri.EscapeDataString(Parameters[key]);
}
} }
} }
} }

View File

@ -1,13 +1,9 @@
using System; using System.Threading.Tasks;
using System.Net.Http;
using System.Threading.Tasks;
namespace IF.Lastfm.Core.Api.Commands namespace IF.Lastfm.Core.Api.Commands
{ {
internal interface IAsyncCommand<T> internal interface IAsyncCommand<T>
{ {
Uri BuildRequestUrl();
Task<T> ExecuteAsync(); Task<T> ExecuteAsync();
Task<T> HandleResponse(HttpResponseMessage response);
} }
} }

View File

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
namespace IF.Lastfm.Core.Api.Commands
{
public abstract class LastAsyncCommandBase<T> : IAsyncCommand<T>
{
public string Method { get; protected set; }
public Uri Url { get; protected set; }
public IAuth Auth { get; protected set; }
public int Page { get; set; }
public int Count { get; set; }
protected Dictionary<string, string> Parameters { get; set; }
protected LastAsyncCommandBase()
{
Parameters = new Dictionary<string, string>();
}
public abstract void SetParameters();
protected abstract Uri BuildRequestUrl();
public abstract Task<T> ExecuteAsync();
public abstract Task<T> HandleResponse(HttpResponseMessage response);
protected void AddPagingParameters()
{
Parameters.Add("page", Page.ToString());
Parameters.Add("limit", Count.ToString());
}
/// <summary>
/// Annoying workaround for Windows Phone's caching...
/// see http://stackoverflow.com/questions/6334788/windows-phone-7-webrequest-caching
/// </summary>
protected void DisableCaching()
{
Parameters.Add("disablecachetoken", DateTime.UtcNow.Ticks.ToString());
}
}
}

View File

@ -5,51 +5,36 @@
namespace IF.Lastfm.Core.Api.Commands namespace IF.Lastfm.Core.Api.Commands
{ {
internal abstract class PostAsyncCommandBase<T> : IAsyncCommand<T> internal abstract class PostAsyncCommandBase<T> : LastAsyncCommandBase<T>
{ {
public string Method { get; protected set; }
public Uri Url { get; private set; }
public IAuth Auth { get; protected set; }
public int Page { get; set; }
public int Count { get; set; }
protected PostAsyncCommandBase(IAuth auth) protected PostAsyncCommandBase(IAuth auth)
{ {
Auth = auth; Auth = auth;
} }
public Uri BuildRequestUrl() protected override Uri BuildRequestUrl()
{ {
return new Uri(LastFm.ApiRoot, UriKind.Absolute); return new Uri(LastFm.ApiRoot, UriKind.Absolute);
} }
public abstract Task<T> ExecuteAsync(); public override async Task<T> ExecuteAsync()
protected async Task<T> ExecuteInternal(Dictionary<string, string> parameters)
{ {
SetParameters();
Url = BuildRequestUrl(); Url = BuildRequestUrl();
parameters.Add("sk", Auth.User.Token); Parameters.Add("sk", Auth.User.Token);
var apisig = Auth.GenerateMethodSignature(Method, parameters); var apisig = Auth.GenerateMethodSignature(Method, Parameters);
var postContent = LastFm.CreatePostBody(Method, var postContent = LastFm.CreatePostBody(Method,
Auth.ApiKey, Auth.ApiKey,
apisig, apisig,
parameters); Parameters);
var httpClient = new HttpClient(); var httpClient = new HttpClient();
var response = await httpClient.PostAsync(Url, postContent); var response = await httpClient.PostAsync(Url, postContent);
return await HandleResponse(response); return await HandleResponse(response);
} }
public abstract Task<T> HandleResponse(HttpResponseMessage response);
protected void AddPagingParameters(Dictionary<string, string> parameters)
{
parameters.Add("page", Page.ToString());
parameters.Add("limit", Count.ToString());
}
} }
} }

View File

@ -1,5 +1,4 @@
using System.Collections.Generic; using System.Net.Http;
using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Helpers; using IF.Lastfm.Core.Api.Helpers;
@ -19,16 +18,11 @@ public AddShoutCommand(IAuth auth, string track, string artist, string message)
Message = message; Message = message;
} }
public async override Task<LastResponse> ExecuteAsync() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("track", Track);
{ Parameters.Add("artist", Artist);
{"track", Track}, Parameters.Add("message", Message);
{"artist", Artist},
{"message", Message}
};
return await ExecuteInternal(parameters);
} }
public async override Task<LastResponse> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse> HandleResponse(HttpResponseMessage response)

View File

@ -1,8 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Enums; using IF.Lastfm.Core.Api.Enums;
using IF.Lastfm.Core.Api.Helpers; using IF.Lastfm.Core.Api.Helpers;
@ -27,24 +24,16 @@ public GetTrackInfoCommand(IAuth auth, string trackname, string artistname)
ArtistName = artistname; ArtistName = artistname;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("track", TrackName);
{ Parameters.Add("artist", ArtistName);
{"track", Uri.EscapeDataString(TrackName)}, Parameters.Add("autocorrect", Convert.ToInt32(Autocorrect).ToString());
{"artist", Uri.EscapeDataString(ArtistName)},
{"autocorrect", Convert.ToInt32(Autocorrect).ToString()}
};
if (!string.IsNullOrWhiteSpace(Username)) if (!string.IsNullOrWhiteSpace(Username))
{ {
parameters.Add("username", Username); Parameters.Add("username", Username);
} }
DisableCaching(parameters);
var apiUrl = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(apiUrl, UriKind.Absolute);
} }
public async override Task<LastResponse<Track>> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse<Track>> HandleResponse(HttpResponseMessage response)

View File

@ -1,8 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Enums; using IF.Lastfm.Core.Api.Enums;
using IF.Lastfm.Core.Api.Helpers; using IF.Lastfm.Core.Api.Helpers;
@ -25,20 +22,14 @@ public GetTrackShoutsCommand(IAuth auth, string trackname, string artistname) :
ArtistName = artistname; ArtistName = artistname;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("track", TrackName);
{ Parameters.Add("artist", ArtistName);
{"track", Uri.EscapeDataString(TrackName)}, Parameters.Add("autocorrect", Convert.ToInt32(Autocorrect).ToString());
{"artist", Uri.EscapeDataString(ArtistName)},
{"autocorrect", Convert.ToInt32(Autocorrect).ToString()}
};
base.AddPagingParameters(parameters); AddPagingParameters();
base.DisableCaching(parameters); DisableCaching();
var apiUrl = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(apiUrl, UriKind.Absolute);
} }
public async override Task<PageResponse<Shout>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<Shout>> HandleResponse(HttpResponseMessage response)

View File

@ -20,15 +20,10 @@ public LoveTrackCommand(IAuth auth, string trackname, string artistname)
ArtistName = artistname; ArtistName = artistname;
} }
public async override Task<LastResponse> ExecuteAsync() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("track", TrackName);
{ Parameters.Add("artist", ArtistName);
{"track", TrackName},
{"artist", ArtistName}
};
return await ExecuteInternal(parameters);
} }
public async override Task<LastResponse> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse> HandleResponse(HttpResponseMessage response)

View File

@ -20,15 +20,10 @@ public UnloveTrackCommand(IAuth auth, string trackname, string artistname)
ArtistName = artistname; ArtistName = artistname;
} }
public async override Task<LastResponse> ExecuteAsync() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("track", TrackName);
{ Parameters.Add("artist", ArtistName);
{"track", TrackName},
{"artist", ArtistName}
};
return await ExecuteInternal(parameters);
} }
public async override Task<LastResponse> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse> HandleResponse(HttpResponseMessage response)

View File

@ -1,8 +1,5 @@
using System; using System.Net.Http;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Enums;
using IF.Lastfm.Core.Api.Helpers; using IF.Lastfm.Core.Api.Helpers;
namespace IF.Lastfm.Core.Api.Commands.UserApi namespace IF.Lastfm.Core.Api.Commands.UserApi
@ -19,15 +16,10 @@ public AddShoutCommand(IAuth auth, string recipient, string message) : base(auth
Message = message; Message = message;
} }
public async override Task<LastResponse> ExecuteAsync() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("user", Recipient);
{ Parameters.Add("message", Message);
{"user", Recipient},
{"message", Message}
};
return await ExecuteInternal(parameters);
} }
public async override Task<LastResponse> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse> HandleResponse(HttpResponseMessage response)

View File

@ -22,19 +22,13 @@ public GetRecentScrobblesCommand(IAuth auth, string username, DateTime from) : b
From = from; From = from;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("user", Username);
{ Parameters.Add("from", From.ToUnixTimestamp().ToString());
{"user", Uri.EscapeDataString(Username)},
{"from", From.ToUnixTimestamp().ToString()}
};
base.AddPagingParameters(parameters); AddPagingParameters();
base.DisableCaching(parameters); DisableCaching();
var uristring = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(uristring, UriKind.Absolute);
} }
public async override Task<PageResponse<Track>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<Track>> HandleResponse(HttpResponseMessage response)

View File

@ -21,16 +21,11 @@ public GetRecentStationsCommand(IAuth auth, string username) : base(auth)
Username = username; Username = username;
} }
public async override Task<PageResponse<Station>> ExecuteAsync() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("user", Username);
{
{"user", Username}
};
AddPagingParameters(parameters); AddPagingParameters();
return await ExecuteInternal(parameters);
} }
public async override Task<PageResponse<Station>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<Station>> HandleResponse(HttpResponseMessage response)

View File

@ -23,19 +23,13 @@ public GetTopAlbumsCommand(IAuth auth, string username, LastStatsTimeSpan span)
TimeSpan = span; TimeSpan = span;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("username", Username);
{ Parameters.Add("period", TimeSpan.GetApiName());
{"username", Uri.EscapeDataString(Username)},
{"period", TimeSpan.GetApiName()}
};
base.AddPagingParameters(parameters); AddPagingParameters();
base.DisableCaching(parameters); DisableCaching();
var uristring = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(uristring, UriKind.Absolute);
} }
public async override Task<PageResponse<Album>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<Album>> HandleResponse(HttpResponseMessage response)

View File

@ -20,19 +20,13 @@ public GetUserInfoCommand(IAuth auth, string username) : base(auth)
Username = username; Username = username;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("user", Username);
{
{"user", Uri.EscapeDataString(Username)}
};
base.DisableCaching(parameters); DisableCaching();
var uristring = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(uristring, UriKind.Absolute);
} }
public async override Task<LastResponse<User>> HandleResponse(HttpResponseMessage response) public async override Task<LastResponse<User>> HandleResponse(HttpResponseMessage response)
{ {
string json = await response.Content.ReadAsStringAsync(); string json = await response.Content.ReadAsStringAsync();

View File

@ -1,5 +1,3 @@
using System;
using System.Collections.Generic;
using System.Net.Http; using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using IF.Lastfm.Core.Api.Enums; using IF.Lastfm.Core.Api.Enums;
@ -20,18 +18,12 @@ public GetUserShoutsCommand(IAuth auth, string username) : base(auth)
Username = username; Username = username;
} }
public override Uri BuildRequestUrl() public override void SetParameters()
{ {
var parameters = new Dictionary<string, string> Parameters.Add("user", Username);
{
{"user", Uri.EscapeDataString(Username)},
};
base.AddPagingParameters(parameters); AddPagingParameters();
base.DisableCaching(parameters); DisableCaching();
var uristring = LastFm.FormatApiUrl(Method, Auth.ApiKey, parameters);
return new Uri(uristring, UriKind.Absolute);
} }
public async override Task<PageResponse<Shout>> HandleResponse(HttpResponseMessage response) public async override Task<PageResponse<Shout>> HandleResponse(HttpResponseMessage response)

View File

@ -48,6 +48,7 @@
<Compile Include="Api\Commands\ArtistApi\GetArtistInfoCommand.cs" /> <Compile Include="Api\Commands\ArtistApi\GetArtistInfoCommand.cs" />
<Compile Include="Api\Commands\ArtistApi\GetArtistShoutsCommand.cs" /> <Compile Include="Api\Commands\ArtistApi\GetArtistShoutsCommand.cs" />
<Compile Include="Api\Commands\GetAsyncCommandBase.cs" /> <Compile Include="Api\Commands\GetAsyncCommandBase.cs" />
<Compile Include="Api\Commands\LastAsyncCommandBase.cs" />
<Compile Include="Api\Commands\PostAsyncCommandBase.cs" /> <Compile Include="Api\Commands\PostAsyncCommandBase.cs" />
<Compile Include="Api\Commands\TrackApi\AddShoutCommand.cs" /> <Compile Include="Api\Commands\TrackApi\AddShoutCommand.cs" />
<Compile Include="Api\Commands\TrackApi\GetTrackInfoCommand.cs" /> <Compile Include="Api\Commands\TrackApi\GetTrackInfoCommand.cs" />

View File

@ -61,6 +61,7 @@ public static FormUrlEncodedContent CreatePostBody(string method, string apikey,
{"format", ResponseFormat} {"format", ResponseFormat}
}; };
// TODO ordering
var requestParameters = init.Concat(parameters); var requestParameters = init.Concat(parameters);
return new FormUrlEncodedContent(requestParameters); return new FormUrlEncodedContent(requestParameters);