2014-01-06 148 views
1

如何獲取查詢字符串中的原始(未解碼)值?獲取原始(未解碼)查詢字符串鍵值

我找到了Request.Url.Query,它成功地給我原始查詢字符串本身。但是,它給了我一個'字符串'類型和整個QS內容:如何獲得鍵/值對?

我確實發現HttpUtility.ParseQueryString,但是這迫使我做解碼。我需要原始名稱/值對。

我必須爲此執行我自己的查詢字符串解析嗎?有沒有人做過我可以忽略的編碼?我發現Mono implementation然而這也強制編碼。

謝謝!

編輯:我尋找這個的原因是因爲有人(而不是我!)編寫了一些代碼來加密一個值並將其放入查詢字符串中。但是他們忘記了先編碼它。 Request.Querystring()所做的解碼使得解密大約50%的解密是不可能的,因爲加密會留下'+'和'。'之類的東西。

+1

爲什麼編碼的鍵/值對比未編碼的鍵更有價值? – paqogomez

+2

很簡單,可以重新編碼從Request.QueryString [key]'返回的值。 –

+0

我尋找這個的原因是有人(而不是我!)編寫了一些代碼來加密一個值並將其放置在查詢字符串中。但是他們忘記了先編碼它。 Request.Querystring()所做的解碼使得解密大約50%的解密是不可能的,因爲加密會留下'+'和'。'之類的東西。 – dferraro

回答

6

Request.QueryString應該給你一個 NameValueCollection所有已經解碼的鍵/值對。

對不起,我誤解了這個問題。你需要自己解析它,但它不應該是困難的:

Request.Url.Query.Split('&').Select(pair => pair.Split('=')) 
    .ToDictionary(a => a[0], a => a[1]); 

這是當然,假設你的網址,未編碼的值不包含「&」或「=」值。如果他們這樣做......那麼這就是那種URL編碼,不是嗎?

+0

謝謝,但我需要未編碼的值。您在瀏覽器地址欄中看到的原始值 – dferraro

+0

@dferraro:對不起,問題尚不清楚。對我而言,「未編碼」意味着「解碼」。地址欄中的值是「URL編碼」值。 – StriplingWarrior

+3

+1。顯然,如果有人編碼失敗,它可能包含'&'和'='在錯誤的地方... –