я получаю ошибку 401 несанкционированно с использованием API Sittify в C # wpf - PullRequest
0 голосов
/ 12 февраля 2019

Я получаю эту ошибку.System.Net.WebException: «Удаленный сервер возвратил ошибку: (401) Несанкционированный.»Код приведен ниже.

Когда я убираю метод «PrintUsefulData (api)», кажется, что все работает нормально, у этого метода есть веб-запрос клиента http.Я пытаюсь запросить следующее https://api.spotify.com/v1/albums.

    static void Main(string[] args)
    {
        _clientId = string.IsNullOrEmpty(_clientId)
            ? Environment.GetEnvironmentVariable("my_clientId")//my id
            : _clientId;

        _secretId = string.IsNullOrEmpty(_secretId)
            ? Environment.GetEnvironmentVariable("my_secretId") // my id
            : _secretId;


        AuthorizationCodeAuth auth =
            new AuthorizationCodeAuth(_clientId, _secretId, "http://localhost:5002", "http://localhost:5002", Scope.PlaylistReadPrivate | Scope.PlaylistReadCollaborative);
        auth.AuthReceived += AuthOnAuthReceived;
        auth.Start();
        auth.OpenBrowser();


        Console.ReadLine();
        auth.Stop(0);

    }

    private static async void AuthOnAuthReceived(object sender, 
    AuthorizationCode payload)
    {
        AuthorizationCodeAuth auth = (AuthorizationCodeAuth)sender;
        auth.Stop();

        Token token = await auth.ExchangeCode(payload.Code);
        SpotifyWebAPI api = new SpotifyWebAPI
        {
            AccessToken = token.AccessToken,
            TokenType = token.TokenType
        };
        PrintUsefulData(api);
    }

    private static async void PrintUsefulData(SpotifyWebAPI api)
    {

        RestClient rClient = new RestClient();
        rClient.endPoint = "https://api.spotify.com/v1/albums";
        string strResponse = string.Empty;
        strResponse = rClient.getRequest();

    }

}

}

public enum HttpVerb
{
    GET,
    POST,
    PUT,
    DELETE
}

class RestClient
{
    public string endPoint { get; set; }
    public HttpVerb httpMethod { get; set; }

    public RestClient()
    {
        endPoint = string.Empty;
        httpMethod = HttpVerb.GET;
    }

    public string getRequest()
    {
        string strResponseVal = string.Empty;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);
        request.Method = httpMethod.ToString();

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ApplicationException("error code: " + response.StatusCode);
            }
            using (Stream responseStream = response.GetResponseStream())
            {
                if (responseStream != null)
                {
                    using (StreamReader reader = new StreamReader(responseStream))
                    {
                        strResponseVal = reader.ReadToEnd();
                    }
                }
            }
        }
        return strResponseVal;
    }
}

}

1 Ответ

0 голосов
/ 15 февраля 2019

Здесь может происходить несколько вещей, но вот мой шанс помочь в зависимости от того, какой код вы отправили:

  • Срок действия токена - Есливы получаете ошибку 401 по запросу, затем вам нужно использовать Refresh Token, который должен был быть предоставлен в точке авторизации, чтобы получить новый Access Token.Это должно применяться к ЛЮБОМ вызову, который вы делаете в API.

  • Параметры запроса - Конечной точке, которую вы вызываете (https://api.spotify.com/v1/albums), требуется параметр idsпоэтому API Spotify знает , какие «альбомы» вы хотели бы вернуть.Дополнительная информация: https://developer.spotify.com/documentation/web-api/reference/albums/get-several-albums/

Еще одна вещь, которую нужно проверить: - Область действия - убедитесь, что при авторизации в API вы устанавливаете необходимую область действия, необходимую для выполнениядействия в будущем.Я не думаю, что это применимо конкретно в этом случае, но стоит отметить.

...