微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Razor Pages 从回调页面访问 Spotify API 访问令牌

如何解决使用 Razor Pages 从回调页面访问 Spotify API 访问令牌

基本上,我有一个执行以下代码的按钮

 $(document).ready(function (){
        $("#login-button").click(function () {
            var parameters = "@Model.parameters";
            parameters = parameters.replace(/&/g,"&");
            window.location.href = "https://accounts.spotify.com/authorize/".concat(parameters);
        })
    })

并且它成功地在 https://localhost:44382/Callback#access_token=TOKEN&token_type=Bearer&expires_in=3600&state=586917 中给出了一个访问令牌。

但我不知道如何从 URL 中提取访问令牌,因此我可以将其用作变量。我试过了

 public IActionResult OnGet()
    {
        @TempData["access_token"] = (string)HttpContext.Request.Query["access_token"];

        return Page();
    }

在 Callback.cshtml.cs 文件上,但它似乎返回 null(整个 Query 不包含任何元素),因为正如我怀疑的那样,它在实际包含令牌的 URL 之前执行。而且,我尝试将以下代码放入 Callback.cshtml,但它遇到了同样的问题。除了 $window.location.href 没有实际重定向

 $(document).load(function () {
         @TempData["access_token"] = @HttpContext.Request.Query["access_token"];
            $window.location.href = "/Overview";

    })

解决方法

https://developer.spotify.com/documentation/general/guides/authorization-guide/

尝试添加一个变量并声明 因此,您可能需要在 window.location.href 之前添加一个 $.ajax 调用。 .. 简洁的通用示例(未测试)


class OrderModel{
  static const ID = "id";
  static const DESCRIPTION = "description";
  static const CART = "cart";
  static const USER_ID = "userId";
  static const TOTAL = "total";
  static const STATUS = "status";
  static const CREATED_AT = "createdAt";
  static const NAME = "name";
  static const CITY = "city";
  static const  PHONE = "phone";

  String _name;
  String _city;
  String _phone;
  String _id;
  String _description;
  String _userId;
  String _status;
  int _createdAt;
  int _total;

  String get name => _name;

  String get phone =>_phone;

  String get city => _city;

  String get id => _id;

  String get description => _description;

  String get userId => _userId;

  String get status => _status;

  int get total => _total;

  int get createdAt => _createdAt;

List cart;

  OrderModel.fromSnapshot(DocumentSnapshot snapshot) {
    _name = snapshot.data()[NAME];
    _phone = snapshot.data()[PHONE];
    _city = snapshot.data()[CITY];
    _id = snapshot.data()[ID];
    _description = snapshot.data()[DESCRIPTION];
    _total = snapshot.data()[TOTAL];
    _status = snapshot.data()[STATUS];
    _userId = snapshot.data()[USER_ID];
    _createdAt = snapshot.data()[CREATED_AT];
    cart = snapshot.data()[CART];
  }
}

无需设置测试应用程序并深入研究,您也可以通过 c# 构建您的请求。您仍然可以使用 ajax 调用,它只是调用控制器中的 action 方法,但控制器可以构建请求。下面的例子....


         $(document).ready(function (){
            var url = "https://accounts.spotify.com/authorize/";
            var parameters = "@Model.parameters";
            $("#login-button").click(function () {
            $.ajax({
                url: 'https://api.spotify.com/v1/browse/new-releases',type: 'GET',headers: {
                    'Authorization' : 'Bearer ' + accessToken
                },success: function(response) {
            parameters = parameters.replace(/&/g,"&");
            window.location.href = url.concat(parameters);
                }
            });
          })
       })

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?