2011-06-20 42 views
3

我有MVC3應用程序,我想保持短URL。什麼是最好的或乾淨的方式來做到這一點? 可以說我有兩個控制器帳戶和主頁。我擁有帳戶控制器中的所有帳戶相關任務登錄,註銷,配置文件,常見問題解答等。家庭控制器中的所有主要任務,如TaskA,TaskB和TaskC。我要尋找網址如下:MVC 3保持短url

  1. www.mydomain.com/Logon
  2. www.mydomain.com/Logoff
  3. www.mydomain.com/Profile
  4. www.mydomain.com/常見問題
  5. www.mydomain.com/TaskA
  6. www.mydomain.com/TaskB

當用戶第一次來到網站,他們需要重定向到登錄頁面。用戶在任何時候都應該能夠從一次控制器動作切換到另一個控制器動作(從TaskA到Logoff)。

這是乾淨的方法嗎?

回答

6

您無需爲每個URL設置路由。在路線限制的幫助下,您可以這樣做:

 routes.MapRoute(
      "Home", // Route name 
      "{action}", // URL with parameters 
      new { controller = "Home", action = "Index" }, // Parameter defaults 
      new { action = "TaskA|TaskB|TaskC|etc" } //Route constraints 
     ); 

     routes.MapRoute(
      "Account", // Route name 
      "{action}", // URL with parameters 
      new { controller = "Account", action = "Logon" }, // Parameter defaults 
      new { action = "Logon|Logoff|Profile|FAQs|etc" } //Route constraints 
     ); 
+0

感謝您的回覆。好主意。讓我試試看! – matmat

+0

看起來像一個很好的解決方案 - 希望沒有重複的動作名稱。 – CRice

+0

它沒有工作。讓我們說用戶登錄成功,在「LogOn」的Post操作方法中,我重定向爲RedirectToAction(「TaskA」); TaskA屬於「Home」控制器。但是MVC運行時尋找url「/ Account/TaskA」。當我們做RedirectToAction時,MVC會自動在URL中添加當前控制器。如果我喜歡RedirectToAction(「TaskA」,「Home」);它會工作,但我不會得到簡短的網址,任何想法如何解決這種情況? – matmat

6

您可以爲與特定路徑不匹配的特定網址設置路由。例如:

routes.MapRoute("Logon", "logon/", new { controller = "account", action = "logon" }); 
routes.MapRoute("TaskA", "TaskA/", new { controller = "home", action = "taska" }); 

如果找不到所有其他URL匹配項,您的默認路徑可以定義您的起始頁。

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}/", // URL with parameters 
      new { controller = "account", action = "logon", id = UrlParameter.Optional } // Parameter defaults 
+1

感謝您的回覆。根據你的想法,我可以通過爲每個操作方法創建一條路線來處理這種情況。所以如果我有50個動作,我最終會創建50條路線。我正在尋找需要最少量代碼的東西。 – matmat

+0

不知道你有這麼多,那什麼frennky建議然後 – CRice

+0

它沒有工作。讓我們說用戶登錄成功,在「LogOn」的Post操作方法中,我重定向爲RedirectToAction(「TaskA」); TaskA屬於「Home」控制器。但是MVC運行時尋找url「/ Account/TaskA」。當我們做RedirectToAction時,MVC會自動在URL中添加當前控制器。如果我喜歡RedirectToAction(「TaskA」,「Home」);它會工作,但我不會得到簡短的網址,任何想法如何解決這種情況? – matmat