2015-05-13 95 views
0

我有一個編碼的URL。QueryString Out of編碼的URL

http%3a%2f%myurl.test.me%2fSometjing%2fProduct%2fSearch%3fq=Tomato 

我想從「番茄」的url中獲取查詢字符串。我正在使用下面的代碼,但它返回null。

var parsedQuery = HttpUtility.ParseQueryString((url)); 
      Console.Write(parsedQuery["q"]); // null 
+0

當然,它會返回null - URL是完全編碼的。你需要先解碼。你還應該修復'http://'部分:'http%3a%2f%2fmyurl.test.me%2fSometjing%2fProduct%2fSearch%3fq = Tomato' –

回答

4

您錯過了幾個步驟。您需要將URL進行解碼,然後拉出查詢字符串,然後解析查詢字符串:

string decoded = 
    HttpUtility.UrlDecode("http%3a%2f%2fmyurl.test.me%2fSometjing%2fProduct%2fSearch%3fq=Tomato"); 

var uri = new Uri(decoded); 
var parsedQuery = HttpUtility.ParseQueryString(uri.Query); 

Console.WriteLine (parsedQuery["q"]); // Tomato 

而且,你的編碼的URL是有點畸形。在帖子中的一個解碼看起來像這樣:

的http:/%myurl.test.me/Sometjing/Product/Search?q=Tomato

我覺得你只是錯過了一個2f%右前myurl.test:番茄

HTTP%3A%2F%2fmyurl.test.me%2fSometjing%2fProduct%2fSearch%3fq =

+0

非常感謝! –

+0

@johndoe:當然,很樂意提供幫助。 –

0

在使用HttpUtility.ParseQueryString()之前,需要先解碼URL。

儘管從MSDN直接提到了公平警告。

ParseQueryString方法使用可能包含用戶輸入的查詢字符串,這是潛在的安全威脅。默認情況下,ASP.NET網頁驗證用戶輸入不包含腳本或HTML元素。 MSDN