2013-06-21 32 views
12

我目前使用的ASP.NET MVC 4路由與LowercaseUrls選項設置爲true,它的工作效果很好。我使用這個配置:不影響參數的小寫URL

 routes.LowercaseUrls = true; 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { 
       controller = "Inicio", 
       action = "Index", 
       id = UrlParameter.Optional 
      }); 

但在特定的一組動作,我有一個加密,並區分大小寫字符串id參數。

然後,當我嘗試生成一個這樣的動作鏈接:

@Html.ActionLink("My Text", "Action", "Controller", new { id = encryptedString }) 

URL中的id參數被轉換爲小寫字母導致一個錯誤,而試圖解密該字符串。

是否可以將路由配置爲忽略URL參數的小寫URL?

+0

我不確定,但如果您使用查詢字符串而不是路由參數,它應該保持獨立? – ryudice

+0

它確實,但我真的更喜歡它不是一個查詢字符串值。 – Meryovi

+0

您可以使用IgnoreRoute免責聲明構建您自己的路線我不知道這是否可以工作只是一個想法 –

回答

10

我以前碰到過這個。我最終做的是AttributeRouting

他們有一個甜美的功能(上面鏈接到)PreserveCaseForUrlParameters

另一種選擇是使用LowercaseRoutesMVC。在這種情況下,你會使某些路線小寫,你​​想單獨留下的路線,你可以事先使用routes.MapRoute。然而,這可能會變得混亂,因爲特殊配置的那些將是小寫,而默認路由的整個路由不會是小寫。

希望這會有所幫助!

+0

切換到AttributeRouting ...很好地工作!謝謝! – Meryovi

+0

AttributeRouting在MVC路線圖上http://aspnetwebstack.codeplex.com/wikipage?title=路標圖 –

+0

不錯,感謝您的鏈接! – technicallyjosh