2009-10-05 162 views
2

在我正在處理的Web應用程序中,我們希望能夠顯示給定路徑上的資源信息。路徑完全是虛擬的—它只存在於應用程序—中,所以我們並沒有真正遇到用戶設置虛擬路徑的問題,這些虛擬路徑在正常文件系統標準下是「怪異的」。使用Url.RouteUrl重定向到帶有#,%等的URL

問題:我們有讀取類似

/Files/{*path} 

東西路線,我們試圖用

Url.RouteUrl("File", new { path = somePath }) 

重定向這通常工作,但如果somePath包含&或#失敗,中其他。在這些情況下,我很勉強。我不能UrlEncode(somePath)在這一點上,因爲RouteUrl做自己的URL編碼,但我不能讓它們保持原樣,因爲否則它們被不當處理(octothorp不傳遞給路由數據,並且&符號混淆了IIS)。有沒有一個合理的方法呢?或者我基本上只需要通過字符串插值實現我自己的路線?

回答

0

我一直在玩弄你的例子,而且我沒有發現任何使用RouteUrl和上面描述的特殊字符的問題,至少不是在我的測試環境中。 RouteUrl方法正確地編碼url,並且控制器獲得解碼形式的值,沒有任何問題或畸形。

我已經在IIS 7以及VS 2008開發Web服務器上測試過了。

你能提供更完整的示例代碼嗎?

+0

我有一個預感,你遵循http://dirk.net/2008/06/09/ampersand-the-request-url-in-iis7/或類似的指示在過去的某個時刻,關於IIS7,但我找不到IIS6的類似修復程序。 – 2009-10-15 16:54:13

0

迄今爲止發現的最佳答案雖然只適用於IIS7,但要按照http://dirk.net/2008/06/09/ampersand-the-request-url-in-iis7/的說明編輯註冊表並更改IIS7的一些默認行爲。這是我們無法接受的,因爲我們正在製作一個應用程序,它將安裝在最終用戶的機器上,無論如何,即使我們不是,也會有一個簡單的事實,即IIS6和IIS5不響應這個序列。對早期版本的IIS的任何想法,或者在IIS7中以編程方式覆蓋這種行爲的方法都會很棒。