如何解决使用 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 举报,一经查实,本站将立刻删除。