2009-02-04 58 views
19

我剛剛開始使用ASP.NET MVC。ASP.NET MVC - MapRoute與routes.Add(和404s)

MapRoute和routes.Add有什麼區別? 我應該只使用MapRoute嗎?我可以繪製多條路線嗎?哪些「地圖」優先考慮?您最先或最後的那些地圖?

我希望能夠做一些類似於StackOverflow爲用戶做的事情。 但我想的URL,以適應這種模式:
「用戶/ {域}/{用戶名}」到路由到一個UserController的

和所有其他請求做典型的ASP.NET MVC路由。例如:

 routes.MapRoute(
      "Default", "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = "" } 
     ); 

UPDATE:
當使用URL:http://localhost:3962/User/MYDOMAIN/BTYNDALL
我得到的錯誤:HTTP 404。您正在查找的資源(或它的一個依賴項)可能已被刪除,名稱已更改,或暫時不可用。

這裏是我使用的代碼:

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "User",              
      "User/{domain}/{username}",       
      new { controller = "User", action = "Index" }  
     ); 

     routes.MapRoute(
      "Default",            
      "{controller}/{action}/{id}",       
      new { controller = "Home", action = "Index", id = "" } 
     ); 

    } 

    protected void Application_Start() 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 
+5

您對這個問題的更新的確是一個不同的問題...你確定要打成一片呢? – DSO 2009-02-04 22:43:58

+0

您可以將Index方法中的代碼粘貼到用戶控制器上。也許,DSO, – JMS 2009-02-04 22:48:33

+0

。我對路線工作方式的假設是正確的。首先建立的路線優先,由Brannon證實。但我得到這個奇怪的404錯誤。也許其他用戶會在遇到有關路由優先權的問題的同時遇到此問題。 – BuddyJoe 2009-02-04 22:49:18

回答

9

您的用戶控制器應具有

public class UserController : Controller { 
    public ActionResult Index(string domain, string username) { return View(); } 
} 

用戶控制器的索引方法的兩個變量得到從路由拾起。

37

MapRoute()超過Routes.Add()擴展方法。使用MapRoute(),除非你需要做一些比它允許的更復雜的事情。

路由按其定義的順序進行評估,因此您首先調用路由。

4

使用!

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "User",              
      "User/{domain}/{username}",       
      new { controller = "User", action = "Index", username= UrlParameter.Optional }  
     ); 

     } 

    protected void Application_Start() 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 
}