2011-01-14 86 views
6

我見過IIS讓冒號進入URL有問題。我還看到了其他人提供的建議hereURL中的ASP.NET MVC冒號

隨着網站我的工作,我希望能夠通過電影,書籍等的標題,進入我的網址,包括結腸癌,像這樣:

mysite.com/Movie/Bob:The Return 

這會被消耗掉例如,我的MovieController,作爲一個字符串,並在線下使用。

我意識到冒號並不理想。有沒有人有任何其他建議?雖然現在差,但我正在從所有冒號(:)查找並替換另一個字符,然後在我想要在控制器端使用它時進行反向替換。

+0

你爲什麼要用冒號?你發現這個工程在IIS以外的服務器上工作嗎?我希望冒號甚至不允許指定端口號,因爲它會使解析協議變得更簡單。使用連字符,下劃線或其他字符。或者讓它成爲另一個關卡,比如`mysite.com/Movie/Bob/The + Return`。 – 2011-01-14 18:58:25

+0

執行`mysite.com/Movie/Bob/The + Return`的問題就是搞清如何拍攝電影標題(「Bob:The Return」)並知道「嘿,標題中有一個冒號。我需要妥善地將它們放在一起。「 – 2011-01-14 22:33:07

+0

也許我應該傳入一個既有標題又有slu class的類,而不僅僅是一個字符串的電影標題? – 2011-01-14 22:34:58

回答

0

冒號是根據RFC 3986的URI中的保留和無效字符。所以不要做違反規範的事情。您需要對其進行網址編碼或使用其他字符。這裏有一個nice blog post你可以看看。

+0

它說它無效?我解釋錯了嗎? pchar = unreserved/pct-encoded/sub-delims /「:」/「@」 – darkangel 2012-05-21 09:08:53

0

最簡單的方法是使用System.Web.HttpUtility.UrlEncode建立網址 和System.Web.HttpUtility.UrlDecode時解釋回來的結果時,()。如果不首先對值進行編碼,則還會遇到空格字符問題。

2

你的方法最大的擔憂之一是電影名稱並不總是唯一的(例如「意大利工作」)。還有其他迴腸字符(例如括號等)。

這可能是一個好主意,使用URL中的ID號碼來定位數據庫中的電影。你仍然可以在你的url中包含一個url友好的電影名稱副本,但是你不需要擔心回到原來的標題,其中包含所有非法字符。

一個很好的例子就是此頁面的網址。你可以看到,除去頁面的標題仍然有效:

ASP.NET MVC Colon in URL

ASP.NET MVC Colon in URL

6

我加入這我的web.config解決這個問題:

<httpRuntime requestPathInvalidCharacters=""/> 

這必須是system.web節內。

默認值爲:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?"/> 

所以只能作出結腸例外它會成爲

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?"/> 

更多詳情:http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestpathinvalidcharacters.aspx

對於我明白冒號作爲URL中的未編碼字符可以接受。我不知道他們爲什麼將它添加到requestPathInvalidCharacters的默認值。