MVC3 MapRoute控制器名称之间没有区域和等区域名称之间不明确

时间:2012-08-26 14:51:48

标签: asp.net-mvc asp.net-mvc-3 maproute

这是我的控制器在root(无区域):

  • 主页
  • 成员

我的领域是:

+常规

  • 控制器1
  • 控制器2

+成员

  • 管理
  • 会员

所以我添加成员区之前我的Login动作是在成员控制器(在Root中),每件事情都没问题,但我知道这个网址收到404错误  (http://MyProject.dev/members/login?ReturnUrl=%2f)

那么如何定义MapRoute来解决这个问题呢?

更新

我在Main Global.asax尝试了这个:

routes.MapRoute(
             "newLogMaproute",
             "members/login{*pathInfo}",
             new { area = "", controller = "Members", action = "Login"}
        );

但是有一个错误:A path segment that contains more than one section, such as a literal section or a parameter, cannot contain a catch-all parameter.

我试试这个:

routes.MapRoute(
             "newLogMaproute",
             "members/login/{*pathInfo}",
             new { area = "", controller = "Members", action = "Login"}
        );

但是这个回归了404。

2 个答案:

答案 0 :(得分:1)

这里发生的事情是区域注册发生在您的会员路线之前,因此区域路线始终优先。

我通过在Global.asax中创建以下内容在测试应用中修复此问题:

  public static void RegisterPreAreaRoutes(RouteCollection routes)
  {
     routes.MapRoute(
     "Members", // Route name
     "members/login", // URL with parameters
     new { controller = "members", action = "login" } // Parameter defaults
   );
  }

然后在Application_Start中确保此路由在之前映射区域已注册:

  protected void Application_Start()
  {
     RegisterPreAreaRoutes(RouteTable.Routes);
     AreaRegistration.RegisterAllAreas();
     RegisterGlobalFilters( GlobalFilters.Filters );
     RegisterRoutes( RouteTable.Routes );
  }

答案 1 :(得分:0)

您需要为您的区域定义自定义路线。 这个不好。你可能会遇到问题。 最好不要造成歧义。

不要忘记使用new string []:

在rotes配置中定义命名空间
   routes.MapRoute(
     "Members", // Route name
     "members/login", // URL with parameters
     new { }, // Parameter defaults
     new[] { "WebApp.Controllers" } // Namespaces for find 
   );