在ASP.NET中获取URL中的锚点链接

23

我有一个如下的URL:

http://localhost/place/663828/bangkok-paradise-restaurant-toronto#r306040

我想检查这个URL中是否存在锚点,并获取它的值来在后台执行一些代码逻辑。

我尝试使用Page.Request,但是其中的属性都没有显示URL的锚链接部分。

例如:

Response.Write(this.Page.Request.RawUrl.ToString());

我基本上尝试了这个页面上的各种组合/属性:http://www.west-wind.com/weblog/posts/269.aspx

只是为了最终确定这个主题:

我复制了 Stack Overflow 的方法,使用了永久链接... :D


3个回答

30

在ASP.NET的服务器端无法检索到#anchor。

这是一个客户端标记,用于告诉浏览器要在页面中的特定位置移动。

您可以在的onLoad事件中使用一些JavaScript代码来检查锚点并使用Ajax将其发送回服务器。

var anchorValue;
var url = document.location;
var strippedUrl = url.toString().split("#");
if(strippedUrl.Length > 1)
    anchorvalue = strippedUrl[1];

参考:从URL中检索锚点值


1
在 JavaScript 中,使用 location.hash 更清晰地访问 URL 的哈希部分。 - Raulucco

17

更加明确地说,锚点标签永远不会作为任何浏览器的HTTP请求的一部分发送。它只在浏览器内部本地解释。无论是ASP.NET还是其他任何Web服务器技术,包括Microsoft在内,都看不到该请求中的锚点。

RFC 1808第2.4.1节:“请注意,片段标识符不被视为URL的一部分。”

正如其他人所建议的那样,你最接近的做法可能是使用客户端读取浏览器窗口位置。


1
好的,你不是完全正确的... 请查看:[http://www.php.net/manual/zh/function.parse-url.php] - Mike Dinescu
12
即使有人编写了解析URL中锚点的代码,也并不意味着它会被任何浏览器通过网络发送。请尝试使用您选择的网络监视器来查看传输过程,您不会在HTTP请求中看到任何锚点。 - stephbu
你还没有完全正确。你链接的RFC是关于URL而不是URI的。-- 片段(fragment)是URI的一个明确定义的部分(参见: https://tools.ietf.org/html/rfc3986#section-3.5),显然原帖作者想要的是URI的片段,而不是URL。你可以尽情地表现自己的学究态度,但最终并没有帮助任何人。 - BrainSlugs83
从Op的问题中,“我有一个url”,“获取它的值在代码后台执行一些代码逻辑”同意锚点是URI的一部分。您是否同意浏览器仅发送URL,而不发送HTTP请求上的锚点?并非要挑剔,但在服务器端执行此操作不属于规范的一部分,这种方式行不通。 - stephbu

8

在C#中,可以通过以下方式从URL解析片段:

var uri = new Uri("http://localhost?id=2#token=23");
var fragment = uri.Fragment; // Will return #token=23

然而,问题在于浏览器不会将片段发送到服务器。如果您从包含此信息的服务收到请求,则服务器端也可以使用该信息。


这并没有回答问题。片段可以被“访问”,但这并不能帮助OP,因为他们想要访问随请求发送的片段。但正如我们所知道的那样,这是不可能的,因为它从未随请求发送到服务器。 “访问”它的唯一目的是如果您已经设置了它。 - John Washam
1
在这种情况下它不起作用,但有时URL不仅可以通过浏览器发送到服务器端,在这种情况下,了解如何通过BCL提取片段是有帮助的。 - Eugeniu Torica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接