【发布时间】:2019-04-02 15:21:08
【问题描述】:
我正在使用 spotify API 创建一个 React/C# 应用程序,我收到了一个访问令牌,但它不起作用。尝试调用 API 时出现错误(如下所示)(不知道为什么会显示“用户名无效”,因为它从未使用过):
错误:消息:“无效的用户名”状态:404
code 来自身份验证过程的较早步骤(当我使用节点时工作,所以我猜那部分是正确的)我使用所有范围只是为了确保这不是问题playlist-modify-public playlist-modify-private user-read-private user-read-email user-read-playback-state user-read-recently-played
我的 C# 代码检索访问令牌:
var spotifyClientId = "id";
var spotifySecret = "secret";
var webClient = new WebClient();
var postparams = new NameValueCollection();
postparams.Add("grant_type", "client_credentials");
postparams.Add("code", code);
postparams.Add("redirect_uri", "http://localhost:8000/");
//api documentation says you can post clientid/secret in either body or header
postparams.Add("client_id", spotifyClientId);
postparams.Add("client_secret", spotifySecret);
//var authHeader = Convert.ToBase64String(Encoding.Default.GetBytes($"{spotifyClientId}:{spotifySecret}"));
//webClient.Headers.Add(HttpRequestHeader.Authorization, "Basic " + authHeader);
var tokenResponse = webClient.UploadValues("https://accounts.spotify.com/api/token", postparams);
var textResponse = Encoding.UTF8.GetString(tokenResponse);
return Json(textResponse);
所以我收到这是响应(注意访问令牌很短)
"\"access_token\":\"BQAOYJZnfS0LPEwwZ_06Be76mx59bpoPsVPD0uTvvrwvDtSNi9flgeZQK8kDPSRyTFdE70iBk5PtEAvqnIQ\",\"token_type\":\"Bearer\",\"expires_in\":3600,\"scope\":\"\"}"`
当我尝试使用此令牌调用 API 时,我收到如上所示的错误。
如果我手动获取令牌,我可以从前端进行 API 调用
【问题讨论】:
-
错误 404 是一般访问错误。如果你有工作代码,最好的方法是使用像wireshark或fiddler这样的嗅探器。比较工作和非工作应用程序请求中的标头。将缺少的标头添加到非工作应用程序,使非工作看起来像工作应用程序。
-
@jdweng 我没有看到任何奇怪的东西。我想我在检索令牌的 C# 代码中犯了一些错误,但我没有收到任何错误
-
该错误是由于缺少标头或错误值造成的,看起来并不奇怪。您必须仔细查看标题并找到任何小的差异。错误不在响应中,而是在请求中。