2013-07-10 184 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