2013-07-10 240 views
0

我有這樣的路線:ASP.NET MVC路由器

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "Funcionario", 
       "{funcionario}", 
       new { controller = "Funcionario", action = "Index", funcionario = UrlParameter.Optional }, 
       new string[] { "Route.Controllers" } 
      ); 

      routes.MapRoute(
       "Servico", 
       "{funcionario}/{servico}", 
       new { controller = "Funcionario", action = "Servico", funcionario = UrlParameter.Optional, servico = UrlParameter.Optional }, 
       new string[] { "Route.Controllers" } 
      ); 

      routes.MapRoute(
       "Default",            // Route name 
       "{controller}/{action}/{id}",       // URL with parameters 
       new { controller = "Home", action = "Index", id = @"\d+" }, // Parameter defaults 
       new string[] { "Route.Controllers" } 
      );    
     } 

但我不能訪問我的家庭/索引。例如:

工作

http://mydomain.com/pablo

http://mydomain.com/pablo/cozinha

http://mydomain.com/home/index/0

不工作

http://mydomain.com/

http://mydomain.com/home/index

回答

0

所有定義的路線是通用的。

  1. http://mydomain.com/pablo將匹配第一個路由

  2. http://mydomain.com/pablo/cozinha將匹配第二條路線

  3. http://mydomain.com/將匹配第一個路由(所以主頁將不會顯示)

  4. http://mydomain.com/home/index將匹配第二條路線。 (因此不會顯示主頁)

應該從特定的順序定義路線。例如你可以改變路線爲,

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Servico", 
      "Func/{funcionario}/{servico}", 
      new { controller = "Funcionario", action = "Servico", funcionario = UrlParameter.Optional, servico = UrlParameter.Optional }, 
      new string[] { "Route.Controllers" } 
     ); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = @"\d+" }, // Parameter defaults 
      new string[] { "Route.Controllers" } 
     );    
    } 

所以,你的請求將像,

  1. http://mydomain.com/Func/pablo
  2. http://mydomain.com/Func/pablo/cozinha
  3. http://mydomain.com/
  4. http://mydomain.com/home/index

因此,路線應該仔細申報,以便請求不會與任何不想要的路線相匹配

+0

我會檢查... – Pablo

+0

好的!這樣,傳遞「/ Func」的作品。但我不想使用控制器名稱。 我在考慮什麼時候是控制器,動作或參數。也許在一個BaseController。但我不知道該怎麼辦。 – Pablo

+0

然後你將無法區分請求。所以請求將不匹配適當的路線。 – Manas