2012-02-16 21 views
1

我有接受「URL」查詢字符串,其值可以是一個未編碼的URL鍵下面的asp.net頁面:如何讀取包含未編碼數據的查詢字符串?

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

感謝,

+0

可以查詢字符串參數包含未編碼的數據? – Jodrell 2012-02-16 13:54:05

+0

'str.Split( 「?」,2)[1]' – 2012-02-16 13:54:11

+0

@Jodrell,它可以例如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&計劃生育= 94681dc4659502d1&BIW = 1680&波黑= 849 – 2012-02-16 14:07:34

回答

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參數

+0

它沒有。它只在#之前得到部分。 – 2012-02-16 14:09:34

+0

並且此行爲是由設計,瀏覽器裁剪所有錨點後,看到我的回答 – 2012-02-16 14:40:00

+0

這不是真的,請參閱谷歌鏈接。 – 2012-02-16 15:36:43

0

我假設你使用C#來做到這一點。您可以通過迭代請求對象來輕鬆獲取參數及其值。或者在這種情況下,由於您知道參數的名稱,只需執行以下操作:

String url = Request.QueryString [「url」];

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

+0

就像我說的,#後的文本不會出現在的Request.QueryString作爲重點。 – 2012-02-16 14:13:20

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

+0

請再次閱讀該問題。我想從該頁面中獲取網址和查詢字符串,例如在page_load上。 – 2012-02-16 14:09:10

4

這是不可能得到在服務器端錨值後,您可以使用Fiddler檢查這個或類似的東西,你應該在客戶端處理這個問題。瀏覽器在錨點後簡單地剝離。

Retrieving Anchor Link In URL for ASP.Net

c# get complete URL with "#"

更新:

我不知道谷歌如何準確地做到這一點,但如果你最初的請求後,小提琴手看看還有另外無#,這裏是一個fidller日誌要求從你的問題:

enter image description here

所以我的建議是看與小提琴手谷歌是如何做到這一點,也許問另一個問題

+0

如果不可能,那麼谷歌如何在搜索某些內容時使用#在他們的url中? – 2012-02-16 14:31:08

+0

我會更新我的答案 – 2012-02-16 14:44:22

相關問題