c# - 我在 c# wpf 中使用 spotify api 收到错误 401 未经授权
问题描述
我收到此错误。System.Net.WebException:'远程服务器返回错误:(401)未经授权。' 下面提供了代码。
当我取出方法“PrintUsefulData(api)”时,一切似乎都正常,该方法有一个 http 客户端 webrequest。我试图请求以下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;
}
}
}
解决方案
这里可能会发生一些事情,但这是我根据您发布的代码提供帮助的机会:
令牌过期- 如果您在请求中收到 401 错误,那么您需要使用
Refresh Token
应该在授权点提供的令牌来获取新的Access Token
. 这应该适用于您对 API 进行的任何调用。请求参数- 您正在调用的端点 (
https://api.spotify.com/v1/albums
) 需要该参数ids
,因此 Spotify API 知道您想要返回哪些“专辑” 。更多信息:https://developer.spotify.com/documentation/web-api/reference/albums/get-several-albums/
另一件要检查的事情: -范围- 确保当您对 API 进行身份验证时,您正在设置您需要在未来执行操作的所需范围。我认为这不适用于这种情况,但值得注意。
推荐阅读
- html - Bootstrap 侧边栏未按预期折叠
- php - 在 laravel 控制器中不重复的随机字符串生成器
- .net - 将 ngx-toastr 与 angular 6 和 .net core 2 项目一起使用
- webpack - 在 webpack 配置中没有使用 HtmlWebpackPlugin 生成 index.html
- angular - Angular:如何使用 RXJS 6 调用 finally()
- windows - /Gh 和 /GH 导致我的应用程序无法启动
- java - 如何在 Java Spring API 中更改默认 Swagger 2 api 文档名称
- autodesk-forge - 如何在 Forge 查看器中获取真实世界的测量值 [2D 计划]
- python - 在 Visual Studio 代码调试器中进行 Pytesting Doctests
- python - 无法在 Windows 上下载 lxml