0

我正在尝试从 spotify api 请求一个令牌以在我的应用程序中使用。但我收到“415 不支持的媒体类型”错误。

我怎样才能克服这个错误?

  1. 我已经在 POSTMAN 中尝试过,它似乎工作正常。
  2. 我试图将内容类型从 x-www-form-urlencoded 更改为 JSON,反之亦然,但没有帮助。
getToken() {
  let clientId = "xxxxxxxxxxxxxxxxxxxxxxxxx";
  let clientSecret = "xxxxxxxxxxxxxxxxxxxxxx";
  let apiURL = "https://accounts.spotify.com/api/token";

  let headers = new HttpHeaders();
  headers.append('Content-Type', 'application/x-www-form-urlencoded');
  headers.append('Authorization', 'Basic ' + btoa(clientId + ':' + clientSecret));

  let params = new HttpParams();
  params.append('grant_type', 'client_credentials');

  this.http.post(apiURL+ params, { headers })
    .subscribe((res: IToken) => {
      console.log('token: ', res.access_token);
      console.log('expires in (s):', res.expires_in);
      console.log('Object: ', res);
      this.token = res.access_token;
      this.expiration = new Date().getTime() / 1000 + res.expires_in;
      console.log('now: ', new Date().getTime() / 1000);
      console.log('expiration: ', this.expiration);
    });
}

请查看 chrome 控制台中的错误图片:

https://i.stack.imgur.com/9vLnm.png

https://i.stack.imgur.com/ZlSte.png

4

1 回答 1

1

只是在黑暗中拍摄,您是否尝试过将标头HttpHeaders()直接传递给构造函数?我看到在实例化它们之后尝试.append().set()标题时有时会发生奇怪的事情。

尝试从以下位置更改您的标头/参数代码:

let headers = new HttpHeaders();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Authorization', 'Basic ' + btoa(clientId + ':' + clientSecret));

至:

...

const encodedClient = btoa(`${clientId}:${clientSecret}`);

const headers = new HttpHeaders({
   'Content-Type': 'application/json',
   'Authorization': `Basic ${encodedClient}`
});

const params = new HttpParams({
   'grant_type': 'client_credentials'
});

...

我无法保证这会解决您的问题,但是从您的图片中我可以看到标题/参数没有显示,尝试一下可能是件好事。

我希望你让它工作!

如果您对事物的引用感兴趣,我过去曾将 Spotify API 用于一个用 Angular 编写的副项目:SpotifyTelevision

于 2019-03-31T19:46:27.317 回答