2010-10-21 38 views
1

我正在嘗試使用HttpUtility.UrlEncode來編碼最終在URL中使用的字符串。MVC HttpUtility.UrlEncode

例如

/string/http://www.google.com

/串/我的測試字符串

其中http://www.google.com是傳遞到控制器的參數。

我曾嘗試以UrlEncode,但它似乎不工作很正確

我的路線是這樣的:

routes.MapRoute(
      "mStringView", 
      "mString/{sText}", 
      new { controller = "mString", action = "Index", sText = UrlParameter.Optional } 
     ); 

的問題是編碼比特解碼似乎在路由的地方..除了「+」代替「」之類的東西沒有被解碼。

瞭解我的情況,其中UrlParameter可以是任何字符串,包括URL的..什麼是在將它們推入我的數據庫之前對它們進行編碼的最佳方式,然後處理解碼知道他們會我作爲參數傳遞給控制器​​?

謝謝!

+0

編碼的URL看起來像什麼?google示例應該顯示'/ string/http%3a%2f%2fwww.google.com' – 2010-10-21 16:23:24

+0

ok這裏是問題/ String/rich%27s + tags +控制器上的測試參數是「rich's tags test」和/ Tag /在控制器測試+另一個+標籤參數是「測試+另一個+標籤」,所以加號不會替換爲這個字符串?我不明白。 – toddm 2010-10-21 16:59:44

+0

在使用該值之前,您可能需要在控制器代碼上執行Http.UrlDecode。 – 2010-10-21 17:41:36

回答

1

看來這個問題已經出現在其他論壇,一般的建議是不依賴於標準的網址編碼的asp.net mvc。優點是URL編碼不一定像用戶友好,因爲我們想要的,這是自定義路由URL的目標之一。例如,這樣的:

http://server.com/products/Goods+%26+Services 

可以友好寫成

http://server.com/products/Good-and-Services 

所以自定義URL編碼已經超越解決此怪癖/錯誤的工作優勢。更多細節和例子在這裏:

http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

0

如果問題是,「+」沒有得到解碼,使用HttpUtility.UrlPathEncode編碼和解碼將按需要工作。

documentation of HttpUtility.UrlEncode

可以編碼具有以UrlEncode方法或 UrlPathEncode方法使用的URL。但是,這些方法返回不同的結果。 UrlEncode方法將每個空格字符轉換爲加號字符 (+)。 UrlPathEncode方法將每個空格字符轉換爲 字符串「%20」,它表示以十六進制表示法的空格。當您編碼URL的路徑部分 時,請使用 UrlPathEncode方法,以保證解碼的URL一致,而不管平臺或瀏覽器執行解碼的是哪一個 。