如何在包含未编码数据的情况下读取查询字符串?

时间:2012-02-16 13:51:27

标签: c# asp.net html url request

我有下面的asp.net页面,它接受一个“url”查询字符串键,其值可以是未编码的URL:

http://localhost:4104/WebSiteForTest/TinyUrl.aspx?url=http://www.google.co.uk/#hl=en&q=life&oq=life&aq=f&aqi=g-s1g9&aql=&gs_sm=3&gs_upl=2803373l2803701l2l2803826l4l4l0l0l0l0l188l453l0.3l3l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=94681dc4659502d1&biw=1680&bih=883

现在从这个页面开始,如何在“.aspx?”之后阅读文本?

我检查了Request.Url.AbsoluteUri属性,它只显示了

"http://localhost:4104/WebSiteForTest/TinyUrl.aspx?url=http://www.google.co.uk/"

我还使用以下代码检查了Request.QueryString:

 private void getQueryString()
    {
        var sb = new StringBuilder();

        var queryStringCount = Request.QueryString.Keys.Count;

        for (int keyIndex = 0; keyIndex < queryStringCount; keyIndex++)
        {
            sb.Append(Request.QueryString.Keys[keyIndex]).Append("=").Append(Request.QueryString[keyIndex]);
            if (keyIndex != (queryStringCount - 1))
            {
                sb.Append("&");
            }
        }
    }

但是,“#”之后的代码不会出现在任何查询字符串中。

如何在“.aspx?”之后阅读文本?

如果你说这是不可能的,谷歌如何在他们的网址中使用“#”然后搜索某些东西?!

http://www.google.co.uk/#hl=en&site=&q=life&oq=life&aq=f&aqi=g-s1g9&aql=&gs_sm=3&gs_upl=3317l3630l0l3755l4l4l0l0l0l0l125l391l3.1l4l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=94681dc4659502d1&biw=1680&bih=849

谢谢,

4 个答案:

答案 0 :(得分:4)

在服务器端锚定后无法获得值,你可以用fiddler或类似的东西来检查它,你应该在客户端处理这个问题。浏览器只需在锚点后删除所有内容。

Retrieving Anchor Link In URL for ASP.Net

c# get complete URL with "#"

更新:

我不知道谷歌究竟是如何做到这一点的,但是如果你在初始请求之后用fiddler看,那么另一个没有#,这里有一个fidller日志来询问您的问题:

enter image description here

所以我的建议是与小提琴手一起看谷歌这样做,或者可能会问另一个问题

答案 1 :(得分:0)

使用Request.QueryString

http://localhost:4104/WebSiteForTest/TinyUrl.aspx?url=http://www.google.co.uk/#hl=en&q=life&oq=life&aq=f&aqi=g-s1g9&aql=&gs_sm=3&gs_upl=2803373l2803701l2l2803826l4l4l0l0l0l0l188l453l0.3l3l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=94681dc4659502d1&biw=1680&bih=883
  

<%=Request.QueryString("url")%>将获取?url参数

答案 2 :(得分:0)

我假设您使用C#来执行此操作。您可以通过迭代请求对象轻松获取参数及其值。或者在这种情况下,因为您知道参数的名称,所以只需执行以下操作:

String url = Request.QueryString [“url”];

有关iterating through your request parameters can be found here的更多信息。

答案 3 :(得分:0)

Uri类型也适用。

String yourHttpUri ="....";
Uri yourURI = new Uri(yourHttpUri);
yourURI.query // "?url=http://www.google.co.uk/"
yourURI.fragment // "#hl=en&q=life&oq=life&aq=f&aqi=g-s1g9&aql=&gs_sm=3&gs_upl=2803373l2803701l2l2803826l4l4l0l0l0l0l188l453l0.3l3l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=94681dc4659502d1&biw=1680&bih=883"

编辑:

您是否尝试过Request.Url.ToString();(并从结果中创建新的Uri