背景:我試圖對MVC應用程序進行一些URL操作。我寫了一個HtmlHelper擴展方法,用另一個替換查詢字符串值。該方法採用當前的請求字符串,手動拆分查詢部分(以防止Foo = 1,Hello,World,2)被讀取爲Foo = 2,並且Foo = 1,並且Foo = Hello,%2c%20World!然後嘗試使用UriBuilder和Uri獲取URL。爲什麼Uri部分解碼查詢部分?
問題:出於某種原因,Uri.ToString部分解碼查詢字符串。作爲一個快速測試,我發射了LINQPad和運行以下:
var ub = new System.UriBuilder("http://foobar");
ub.Query = "NY%26A"; // NY&A
ub.Uri.Dump();
ub.Uri.ToString().Dump();
ub.Uri.Query.Dump();
ub.ToString().Dump();
的結果是:
http://foobar/?NY&A
http://foobar/?NY&A
?NY%26A
http://foobar:80/?NY%26A
我說的部分解碼,因爲如果我用很多轉義字符,它解碼部分和離開他人的地方:
var ub = new System.UriBuilder("http://foobar");
ub.Query = "!%40%23%24%25%5E%26*()"; // [email protected]#$%^&*()
ub.Uri.Dump();
ub.Uri.ToString().Dump();
ub.Uri.Query.Dump();
ub.ToString().Dump();
而且結果:
http://foobar/[email protected]%23$%25^&*()
http://foobar/[email protected]%23$%25^&*()
?!%40%23%24%25%5E%26*()
http://foobar:80/?!%40%23%24%25%5E%26*()
問題:有人可以解釋發生了什麼嗎?
感謝您的答覆。我想知道它爲什麼會解碼,因爲這也會改變URI的含義。我的目標是能夠獲取現有的URI,更改某些內容並獲取完整的URI。沒有.NET類很容易,但我想知道發生了什麼。 – 2012-04-25 20:07:08