2012-03-01 63 views
2

我在這裏做了一件壞事。我提出一個問題,而不是先跳出來試試,即有人知道這是一個簡單的方法。ASP.NET MVC 3區分大小寫的網址

我們可以讓ASP.NET MVC路由系統區分大小寫嗎?我想下面的兩個網址是不同的:

example.com/a

example.com/A

我們有一個簡單的辦法還是應該寫我們自己的處理程序這個。

+1

我很想知道爲什麼你需要這樣做。這是什麼原因? – 2012-03-01 14:36:32

+3

您是否希望使Controller,Action或其他可選參數區分大小寫?所有可以使用路由約束完成。如果只是控制器/操作,您希望區分大小寫,則可以使用單個路由約束,但是如果要使可選值區分大小寫,則可能需要爲每個要驗證的路由選擇不同的路由約束。另一方面,如果您正在編碼路線,例如/將地圖映射到主控制器索引操作和/映射到主控制器關於操作,那更容易,可以使用RegEx路由限制。 – 2012-03-01 14:55:42

+0

我想要這個的目的是能夠爲url縮短服務生成情人和大寫隨機字符串。 – tugberk 2012-03-01 16:11:23

回答

5

我還沒有嘗試過,但我會認爲,如果您使用正則表達式路由約束,只匹配大寫和小寫分隔符,這將工作。但我認爲這不是一個好主意。

3

這似乎是一個壞主意。你假設人們永遠不會手動觸摸一個網址,總是點擊鏈接。

另外,默認情況下,假設某些路由值是數據庫綁定的,MSSQL不區分大小寫。

我也願意打賭,搜索引擎中的所有網址都是小寫(Edumacated guess)。

編輯

所有谷歌付費搜索URL是小寫。

如果你仍然堅持這樣的話:

您可能還必須有實現一個自定義視圖引擎,以查找區分大小寫的基礎上的意見。也是定製控制器工廠,以查找區分大小寫的控制器。

+0

區分大小寫的控制器/操作可以使用IRouteConstraint和反射或自定義Controller Factory完成。如果OP使用ActionLink或甚至調用Url.Action,則RouteConstraint是更好的選擇。 – 2012-03-01 15:00:58

+0

搜索引擎最好不要更改URL的情況,這會導致不同的URL。參見[RFC 3986 6.2.2.1](http://tools.ietf.org/html/rfc3986#section-6.2.2.1)和[RFC 2616 3.2.3](http://tools.ietf.org/html/ RFC2616#部-3.2。3) – derkyjadex 2012-04-11 18:20:54

+0

只有域名不區分大小寫。 URI路徑區分大小寫。 – Monstieur 2013-02-26 06:37:08

3

還要注意,像區分大小寫的正則表達式的選項可由事情改變中期的正則表達式,如:

...(?-i:nonCaseSensitiveBit)backToCaseInsensitive... 

見正則表達式文檔的完整讀出。