当url包含#时,获取完整url不起作用

本文关键字:url 不起作用 获取 包含 | 更新日期: 2023-09-27 18:25:32

Hello堆栈溢出peeps,

在实现oAuth系统时遇到了一些问题。

//https://github.com/justintv/Twitch-API/blob/master/authentication.md
public ActionResult AuthorizeTwitch(CancellationToken cancellationToken) {
    var twitchBridge = new TwitchBridge();
    var codes = Request.Params.GetValues("code");
    var token = Request.Params.GetValues("access_token");
    // stage 1 Initial Handshake
    if (codes == null && token == null) {
        return Redirect(twitchBridge.AuthorizeUrl());
    }
    // stage 2 We have a code so we are at stage two request the token
    else if (codes != null) {
        return Redirect(twitchBridge.RetrieveToken(codes[0]));
    }
    // SAVE OAUTH STUFF DOWN HERE.
    // THEN REDIRECT
    return RedirectToAction("Index", "Home");
}

然而,在第1阶段和第2阶段,上述操作似乎有效,但当我从第2阶段收到响应时,我会被重定向到一个看起来像的URL。

http://localhost:58434/Home/AuthorizeTwitch#access_token=anaccesstoken&scope=user_read

这击中了我的操作,但我无法访问access_token的值。我可以访问Request.Url.OriginalString,但返回字符串看起来像。

http://localhost:58434/Home/AuthorizeTwitch

调试并查看请求对象和URL对象,从#开始似乎没有存储任何内容。我怀疑这与我的网站设置的路线有关。

被击中的相关路线是

routes.MapRoute(
    name: "Default2",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

有人能看出我做错了什么吗?

如果这与我实际请求抽动有关,这就是我构建url的方式。

public string AuthorizeUrl() {
    return string.Format(
        "{0}{1}?response_type=code&client_id={2}&redirect_uri={3}&scope={4}",
        TwitchUrlBase,
        TwitchAuthorizeMethod,
        ClientId,
        HttpUtility.UrlEncode(TwitchAuthorizeRedirectURL),
        TwitchAuthorizeScope
    );
}
public string RetrieveToken(string code) {
    return string.Format(
        "{0}{1}?response_type=token&client_id={2}&client_secret={3}grant_type=authorization_code&redirect_uri={4}&scope={5}",
        TwitchUrlBase,
        TwitchAuthorizeMethod,
        ClientId,
        ClientSecret,
        HttpUtility.UrlEncode(TwitchAuthorizeRedirectURL),
        TwitchAuthorizeScope
    );
}

当url包含#时,获取完整url不起作用

片段不应该由客户端发送到服务器,所以它不在那里是有道理的。你是想发送查询吗?