如何从服务器端获取Url哈希()

如何从服务器端获取Url哈希(),url,server-side,fragment-identifier,Url,Server Side,Fragment Identifier,我知道在客户端javascript中,您可以使用windows.location.hash,但无法从服务器端找到访问权限。我正在使用asp.net。这是因为浏览器没有将该部分传输到服务器,很抱歉。第4.1节: 当URI引用用于在上执行检索操作时 标识的资源,可选的片段标识符,与 URI由一个交叉线字符组成,由附加的 用户代理在 检索操作已成功完成。事实并非如此 URI的一部分,但通常与URI结合使用 emphasis added可能唯一的选择是在客户端读取它,然后手动将其传输到服务器GET/PO

我知道在客户端javascript中,您可以使用windows.location.hash,但无法从服务器端找到访问权限。我正在使用asp.net。

这是因为浏览器没有将该部分传输到服务器,很抱歉。

第4.1节:

当URI引用用于在上执行检索操作时 标识的资源,可选的片段标识符,与 URI由一个交叉线字符组成,由附加的 用户代理在 检索操作已成功完成。事实并非如此 URI的一部分,但通常与URI结合使用


emphasis added

可能唯一的选择是在客户端读取它,然后手动将其传输到服务器GET/POST/AJAX。 当做 阿图尔

您还可以看到如何播放后退按钮和浏览器历史记录

为了排除这种可能性,您实际上没有试图在GET/POST上查看片段,并且确实想知道如何访问服务器端代码中的URI对象的这一部分,它位于URI.fragment下。

我们遇到了一种情况,需要在ASP.Net POST back中持久化URL哈希。由于默认情况下浏览器不会将哈希发送到服务器,因此唯一的方法是使用一些Javascript:

当表单提交时,抓取hash window.location.hash并将其存储在服务器端的隐藏输入字段中,将其放入id为urlhash的DIV中,以便我们以后可以轻松找到它

在服务器上,如果需要使用此值,可以使用它。如果需要,你甚至可以改变它

在客户端的页面加载上,检查此隐藏字段的值。您将希望通过它所包含的DIV来查找它,因为自动生成的ID是未知的。是的,您可以在这里使用.ClientID进行一些技巧,但我们发现只使用包装器DIV更简单,因为它允许所有这些Javascript都存在于外部文件中,并以通用方式使用

如果隐藏的输入字段具有有效值,请再次将其设置为URL hash window.location.hash,并/或执行其他操作

我们使用jQuery来简化字段的选择,等等。。。总之,它最终只需要几个jQuery调用,一个用于保存值,另一个用于恢复值

提交前:

页面加载时:

IsHashValid可以检查未定义的内容或其他您不想处理的内容


当然,还要确保正确使用$document.ready。

GET请求的可能解决方案:

新链接格式:http://example.com/yourDirectory?hash=video01

向控制器顶部调用此函数或http://example.com/yourDirectory/index.php:


你有办法解决这个问题吗?我在url中有带有的书签,想在服务器端访问散列后的文本?答案解释说,这在服务器上是无效的,因为它只能由用户代理进行解释。我试图更改活动选项卡,我试图在服务器端这样做。我最终在客户端完成了这项工作,IE8、Chrome和Firefox的可能副本都不会将哈希发送到服务器;因此,如果按照上面的回复检查Request.Url.Fragment服务器端,Uri.Fragment始终是空字符串。很好的解决方案,但是GET Request是什么?@Chris-但是当您简单地将Url粘贴到其他浏览器中时,表单提交事件是如何调用的,因为它只是一个GET请求?@Warlock,不管get/post如何,它都会工作,因为您将散列存储在一个隐藏字段中。我很惊讶。我读过很多关于水疗的书,但我并不知道。所以浏览器发送了如此多的敏感信息,而不是散列??我认为应该把它推广到未来。。至少作为一个单独的HTTP头。这与:
$("form").submit(function() {
  $("input", "#urlhash").val(window.location.hash);
});
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
  window.location.hash = hashVal;
}
function redirect()
{
    if (!empty($_GET['hash'])) {
        /** Sanitize & Validate $_GET['hash']
               If valid return string
               If invalid: return empty or false
        ******************************************************/
        $validHash = sanitizeAndValidateHashFunction($_GET['hash']);
        if (!empty($validHash)) {
            $url = './#' . $validHash;
        } else {
            $url = '/your404page.php';
        }
        header("Location: $url");
    }
}