1

我正在設置一個單頁應用程序(SPA)並且想要設置當前兩條路線。例如:ASP.NET MVC4路由 - 到同一位置的多條路線

  • 路線1:http://localhost - 這是缺省路由,其要求認證(管理區域)
  • 路線2:http://localhost/<client>/<clients project name>/ - 這並不需要認證(僅視圖)

在管理員區域,他們設置了<client><clients project name>,因此我知道我需要在MVC4路由中設置此配置,但是我不清楚該如何處理此問題。

另一個警告是,如果<clients project name>未輸入到URL中,它將顯示該客戶端的搜索頁面。

回答

5

有關MVC路由的優點之一是能夠將任何內容路由到任何位置,而不管url是否與控制器和操作方法的命名相匹配。 RouteConfig允許我們註冊特定的路線來迎合這一點。讓我告訴你如何實現這一點。

路線1:

這是通過在路徑配置的默認路由處理。

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

擊中http://localhost會帶你到Home控制器和Index操作方法。

路線2:

我們可以設置一個路由,將滿足http://localhost/<client>http://localhost/<client>/<clients project name>

routes.MapRoute(
    "Client", 
    "{client}/{title}", 
    new { controller = "Home", 
      action = "Client", 
      title = UrlParameter.Optional }); 

擊中要麼http://localhost/baconhttp://localhost/bacon/smokey會帶你到Home控制器和Client操作方法。請注意,title是一個可選參數,這是我們如何讓這兩個網址使用相同的路線。

爲了在控制器端工作,我們的動作方法Client需要像這樣。

public ActionResult Client(string client, string title = null) 
{ 
    if(title != null) 
    { 
     // Do something here. 
    } 
} 
+2

+1這是冒煙的培根,沒有雙關語:) – mattytommo 2013-04-30 13:02:41

+0

真是一個很好的解釋。感謝你!我相信這會讓我面對未來更多的問題。 – Jesse 2013-04-30 18:52:59

+0

這也適用於Web API路由嗎?而不是使用MapRoute,你只需使用MapHttpRoute? – Jesse 2013-04-30 19:52:26