在ASP.Net的URL中检索锚链接

时间:2009-04-21 19:09:21

标签: asp.net anchor

我有一个这样的网址:

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

我试图看看是否存在锚标记以及获取它在后面的代码中执行某些代码逻辑的值。

我一直在尝试使用Page.Request,但没有一个属性显示网址的锚链接部分。

例如:

回复于(this.Page.Request.RawUrl.ToString());

在此页面上尝试了组合/属性:http://www.west-wind.com/weblog/posts/269.aspx

刚刚完成这个主题:

我用永久链接复制了Stackoverflow的方法......:D

3 个答案:

答案 0 :(得分:24)

无法从ASP.NET

中的服务器端检索#anchor

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

您可以在body onLoad事件中使用一些Javascript来检查锚点并使用ajax将其发送回服务器。

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

参考:http://www.wacdesigns.com/2008/01/16/retrieving-anchor-value-from-url/

答案 1 :(得分:14)

更明确的是,锚标记永远不会被任何浏览器作为HTTP请求的一部分发送,它只在浏览器中本地解释。 ASP.NET或任何其他Web服务器技术,Microsoft或其他方式都不会在该请求上看到锚点。

  

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

正如其他人所建议的那样,您可以使用最近的客户端来读取浏览器窗口位置。

答案 2 :(得分:7)

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

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

然而,有一个问题是浏览器不会将片段发送到服务器。如果您在请求中收到来自包含此信息的服务的请求,它也可以从服务器端获得。