我想打开以下页面:
但是当我尝试使用WebRequest
类打开它时,它会从网址中删除“Fragment”(在这种情况下不是Uri片段),并尝试打开以下网址:
http://www.google.com/search?q=dvd+player&tbm=shop&hl=en&aq=f
如何准确打开该网址?
我尝试编码#
字符,但这似乎不起作用。
修改
我知道URL是什么,片段是什么,以及所有这些。我问的是,是否有办法覆盖Uri
类的功能。 (要获取Uri,删除#
之后的内容并将其放在Fragment
属性中等),这样我就可以查询该网址,而不是修改后的网址。
答案 0 :(得分:3)
虽然示例中的片段并不完全符合片段的设计要求,但它仍然向浏览器提供客户端数据,以便在页面初始加载后执行操作。如果您在点击链接时仔细观察,您会看到页面标题以“dvd player”(从原始查询字符串开始)开始,但在页面从服务器加载后更改为“汽车扬声器”客户端脚本执行。
答案 1 :(得分:1)
据我所知,#表示一个片段(通常是网页中的一个锚点)并且实际上不是URL的一部分,它只是将浏览器带到页面的特定部分,并在客户端上处理只是。
换句话说,它不是URI请求的一部分。
片段标识符的功能与其余部分不同 URI:即,它的处理是专门的客户端,没有 来自服务器的参与 - 当然服务器通常有帮助 确定MIME类型,并确定MIME类型 处理碎片。
当代理(例如Web浏览器)时 从Web服务器请求资源,代理将URI发送到 服务器,但不发送片段。相反,代理等待 服务器发送资源,然后代理处理 资源根据文档类型和片段值。
答案 2 :(得分:1)
这是一个奇怪的问题,因为fragment
实际上不应该被服务器解析。但是,在您的示例网址中,片段肯定正在被使用(可能在谷歌JS,客户端?)
这是一个快速入侵,似乎通过对整个查询进行编码来完成所需的操作:
string str =
"http://www.google.com/search?q=dvd+player&tbm=shop&hl=en&aq=f#q=car+speaker+&hl=en&sa=X&ei=vbtSTqTPDKXniAKy0-iDAw&ved=0CC0QpwUoAA&tbs=cat:895%2Cprice%3A1%2Cppr_min%3A50%2Cppr_max%3A99.99&tbm=shop&tbo=&fp=1&biw=851&bih=426&cad=b&bav=on.2,or.r_gc.r_pw.";
string[] arr = str.Split( '?' );
string uriString = arr[0] + "?" + HttpUtility.UrlEncode( arr[1] );
var uri = new Uri( uriString );
var request = ( HttpWebRequest )WebRequest.Create( uri );
修改强>
回想起来,fragment
正在客户端JS上使用,而不是服务器端。
更好的想法可能是了解google的Url's,即你的Uri应该是:
http://www.google.com/search?q=car+speaker&hl=en&tbs=cat:895,price:1,ppr_min:50&tbm=shop
答案 3 :(得分:0)
片段是客户端机制,因此在服务器上没有用处。您传回服务器的任何数据都在查询字符串中,那么您尝试将片段传回后会有什么好处呢?
答案 4 :(得分:0)
如果您需要在客户端使用此变量,则可以使用此javascript代码
<script>
if(window.location.hash) {
console.log(window.location.hash);
window.location.hash = window.location.hash;
}
</script>