2013-04-25 76 views
0

我有一個特定的路由需求,我無法工作。在StackOverflow中,我發現了很多答案,這些答案帶給我一些啓發,但不是全部。用破折號和非英文字符路由

林命名我的控制器和動作標準C#的方式,即每個單詞的第一個字母大寫:

MyController.MyAction()

爲了達到這一操作方法,我倒是像所有這些URL的工作:

/my-controller/my-action 
/my-cöntroller/my-äction 
/MyController/MyAction 
/MyCöntroller/MyÄction 

(這兩個最後的是不是超級重要,雖然...)

所以這裏有兩件事情:

  1. 破折號可用於分離的話(爲了可讀性和SEO 目的)。
  2. 可以使用一些非英文字符(所有替換 指定 - 沒有「魔術」)。

我想創建一個助手這樣的環節:即標準方式

@Html.ActionLink("My link text", "MyController", "MyAction") 

,這將創建下列鏈接:

/my-controller/my-action 

希望這可以在沒有完成這使得我的路由配置過於混亂(例如,對於每個動作或某事都有一條路由),或者將屬性放在所有動作方法上,但如果這是我想知道的唯一解決方案。

我到目前爲止所嘗試的是實現一個覆蓋GetRouteData()和GetVirtualPath()的自定義路由類。它讓我更接近但並不是所有的方式,但我可能會做錯的事

我有一個想法,通過在執行路由之前進行替換來解決非英文字符的問題,但是我沒有找到尚未完成的方法(see this question)。

如果有人能夠幫助我,或者至少指出我的方向正確,我會非常感激! :)

編輯:請注意,上面的示例網址只是爲了描述我想要的內容。實際上有很多網址必須被處理,所以我更喜歡一些通用的解決方案,而不是一個涉及每個動作的路徑或類似的東西。

回答

0
  1. 創建資源文件

    Name   Value 
    myaction1 my-äction 
    myaction2 my-action 
    mycontroller1 my-cöntroller 
    mycontroller2 my-controller 
    
  2. 添加以下Global.asax中

    routes.MapRoute( 名RegisterRoute方法路線: 「路徑1」, 網址:Resources.Actions .mycontroller1 +「/」+ Resources.Actions。myaction1, 默認值:new {controller =「mycontroller1」,action =「myaction1」} );

     routes.MapRoute(
          name: "route2", 
          url: Resources.Actions.mycontroller2 + "/" + Resources.Actions.myaction2, 
          defaults: new { controller = "mycontroller2", action = "myaction2" } 
         ); 
    
  3. 在控制器,

    [HttpGet] 
        public ActionResult myaction1() 
        { 
    
         return View(""); 
        } 
    
    [HttpGet] 
    public ActionResult myaction2() 
    { 
        return View(""); 
    } 
    
  4. 在_Layout.cshtml

    @ Html.ActionLink(Resources.Actions.myaction1 「myaction1」, 「mycontroller1」) @Html。 ActionLink(Resources.Actions.myaction2,「myaction2」,「mycontroller2」)

+0

Thanks for the答案asb,但這不適合我。我會有很多網址,並且有/無非英文字符等的組合會迫使我使用此解決方案獲得大量路線。另外,每次添加新操作時,我都必須添加新路線。我已更新我的描述以澄清此問題。 – haagel 2013-04-26 09:25:37