Я создаю приложение Spotify, используя SpotifyAPI-NET .После аутентификации я получаю индекс вне диапазона.Я не знаю, почему это происходит, поскольку кажется, что это на стороне API, и сообщение об исключении бесполезно, поскольку оно многопоточное.
private static SpotifyWebAPI _spotify;
//...in an async method
WebAPIFactory webApiFactory = new WebAPIFactory(
Spotify.RedirectURL, //http://localhost:8008/test/
Spotify.Port, //8000
Spotify.ClientID,
Scope.UserReadPrivate,
TimeSpan.FromSeconds(20)
);
try {
_spotify = await webApiFactory.GetWebApi(); //exception here
} catch (Exception ex) {
Console.WriteLine(ex.Message);
}
Сервер работает нормально, и поэтомуаутентификация, пока я не нажму кнопку ОК.Затем он перенаправляет на страницу с «Отмена авторизации Spotify!»и я получаю исключение индекса из диапазона.
Вот исключение:
Unhandled Exception: System.ArgumentOutOfRangeException: Index was out
of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item(Int32 index)
at System.Collections.Specialized.NameValueCollection.GetKey(Int32 index)
at System.Web.HttpValueCollection.Get(Int32 index)
at SpotifyAPI.Web.SimpleHttpServer.<>c__DisplayClass6_1.<HandleGetRequest>b__2(Object o)
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart(Object obj)
Я попытался войти в систему другим способом, но, похоже, он тоже не работает:
using static SpotifyAPI.Web.Enums.Scope;
static AutorizationCodeAuth auth;
//...
auth = new AutorizationCodeAuth {
ClientId = Spotify.ClientId,
RedirectUri = Spotify.RedirectUrl,
Scope = PlaylistModifyPublic | PlaylistModifyPrivate | PlaylistReadPrivate | Streaming | UserReadPrivate | UserReadEmail | UserLibraryRead | UserLibraryModify | UserFollowModify | UserFollowRead | UserReadBirthdate | UserTopRead | PlaylistReadCollaborative | UserReadRecentlyPlayed | UserReadPlaybackState | UserModifyPlaybackState,
ShowDialog = true
};
auth.OnResponseReceivedEvent += Auth_OnResponseReceivedEvent;
auth.StartHttpServer(Spotify.WebPort);
auth.DoAuth();
private static void Auth_OnResponseReceivedEvent(AutorizationCodeAuthResponse response) {
Token token = auth.ExchangeAuthCode(response.Code, Spotify.ClientSecret);
SpotifyWebAPI api = new SpotifyWebAPI {
AccessToken = token.AccessToken,
TokenType = token.TokenType
};
PrintUsefulData(api);
}
private static async void PrintUsefulData(SpotifyWebAPI api) {
PrivateProfile profile = await api.GetPrivateProfileAsync();
string name = string.IsNullOrEmpty(profile.DisplayName) ? profile.Id : profile.DisplayName;
Console.WriteLine($"Hello there, {name}!"); //name is always empty
}