【问题标题】:Cannot read fraqment parameters from url无法从 url 读取 fraqment 参数
【发布时间】:2013-12-04 17:14:54
【问题描述】:

我正在与 vk.com 集成。他们的文档说你将在授权后被重定向到下一个 url

http://REDIRECT_URI#access_token= 533bacf01e11f55b536a565b57531ad114461ae8736d6506a3&expires_in=86400&user_id=8492 

重定向发生了,但我没有看到 access_token、expires_in 和 user_id 变量。我调查了 HttpContext 并没有找到这些参数。 这个HttpContext.Request.Url 只是显示我的网址,没有#access_token= 533bacf01e11f55b536a565b57531ad114461ae8736d6506a3&expires_in=86400&user_id=8492

但是如果我将 # 字符替换为 ?在 url 中它按预期工作。

我正在使用来自 ASP.NET MVC 的 vk api。有人知道如何获取这些参数吗?

【问题讨论】:

  • 浏览器不会将片段(URL 中# 之后的任何内容)发送到服务器。仔细阅读 API 文档。
  • 这是文档vk.com/dev/auth_mobile 我读了很多遍。俄语文档

标签: c# asp.net-mvc oauth-2.0 vk


【解决方案1】:

无法读取片段,因为它没有发送到服务器(VK 可能会这样做以提高身份验证过程的安全性)您的选择是use JavaScript

<script>
  if(window.location.hash) {
      //Puts hash in variable, and removes the # character
      var hash = window.location.hash.substring(1); 
      // hash found
      alert (hash);
  } else {
      // No hash found
  }
</script>

【讨论】:

    【解决方案2】:

    遗憾的是,Fragment 没有传递给服务器。

    当您尝试从Request.Uri.Fragment 获取它时,它始终为空。

    没有简单的方法可以在服务器上获取片段。 您必须使用 javascript 来检索片段并将其发送到服务器可能使用 AJAX 或者您可以创建一个读取片段的中间页面并将用户重定向到另一个页面,片段替换为查询字符串。

    中间页面可能是这样的:

    if(window.location.hash) {
        window.location= '/yoururl.htm' + window.location.hash.replace('#','?');
    }
    

    【讨论】:

    • Request.Url.Fragment 返回“”。 :(
    • 浏览器不发送片段到服务器。仅在解析完整 URI 时才有用:new Uri("http://www.my.com/home#frag").Fragment
    • @Radislav 浏览器使用过吗?
    • 是的,我正在使用浏览器。
    • 谷歌浏览器。我不确定它是否有意义。我将使用 firefox 和 IE 11 进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2017-10-15
    • 2021-05-18
    • 2014-06-13
    相关资源
    最近更新 更多