2012-09-07 34 views
2

我有一個ashx文件,它需要一些查詢字符串值來傳遞適當的圖像。在上下文中解碼查詢字符串。請求

問題是一些搜索引擎urlencode然後htmlencode這些網址在他們的緩存或當他們索引這些。

因此,例如,而不是讓

/preview.ashx?file=abcd.jpg&root=small 

我得到

/preview.ashx?file=abcd.jpg&root=small 

這主要投落context.Request.QueryString["root"]所以它認爲沒有可變

我猜第二查詢字符串中的鍵是amp;根即部分&簽收後。

我想知道的是,如果有一種方法來自動html和urldecode服務器端querystring,以便程序不會感到困惑。

+0

你用'C'標記了問題 - 你的意思是'C#'嗎? – Oded

+0

不應該是︰'context.Request.QueryString [「root」]'(_string_'根') – Oded

+0

是的..我的意思是c#... context.Request.QueryString [「root」]應該返回小,但是它返回null,因爲沒有這樣的密鑰根....有一個關鍵放大器;根 – robert

回答

5

不止一次呼叫HttpUtility.HtmlDecodeHttpUtility.UrlDecode沒有任何傷害。

string queryString = "/preview.ashx?file=abcd.jpg&root=small"; 
var parsedString = HttpUtility.HtmlDecode(queryString); 
var root = HttpUtility.ParseQueryString(parsedString)["root"]; 
+0

謝謝...我實際上是試圖避免這樣做...但我想因爲沒有辦法SET context.Request解碼後的.QueryString,這也應該工作。想知道是否有辦法將其解碼到服務器端,這樣我就可以將程序從其中解脫出來 – robert

+0

實際上,如果您在原始URL中使用了編碼+符號,並且您稱爲解碼兩次,那麼這不是問題嗎?第一次,它將被解碼爲+,但第二次,+將被解碼爲空間。除非我錯過了什麼? – muttley91

+0

@rar如何發佈一個使用前例'HttpUtility.UrlEncode'和'HttpUtility.UrlDecode'的示例,以便我們可以討論具體的示例代碼。 –

4

爲URL編碼和解碼可以使用以下方法:

string encoded = System.Web.HttpUtility.UrlEncode(url); 

string decoded = System.Web.HttpUtility.UrlDecode(url); 

我見過的情況下在查詢字符串已經被雙重編碼了過去。在這種情況下,您需要雙重解碼 - 這可能是您的問題...