2012-08-26 39 views
2

這是我的控制器根(不含區):MVC3圖路線控制器名稱之間的曖昧,而不區和平等區域名稱

  • 首頁
  • 成員

而且我的領域是:

+通用

  • 控制器1
  • 控制器2

+會員

  • 管理
  • 會員

所以我Login行動在成員控制器(根)之前,我加入會員區的每一件事是好的,但知道我收到此URL的404錯誤 (http://MyProject.dev/members/login?Re turnUrl =%2f)

那麼我如何定義一個MapRoute來解決這個問題呢?

更新

我嘗試這一個主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"} 
     ); 

但這個o ne返回404.

回答

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); 
    } 
0

您需要爲您的區域定義自定義路線。 這不好。之後您可能會遇到問題。 最好不要造成歧義。

不要忘記的定義與新的String []在rotes配置的命名空間:

routes.MapRoute(
    "Members", // Route name 
    "members/login", // URL with parameters 
    new { }, // Parameter defaults 
    new[] { "WebApp.Controllers" } // Namespaces for find 
    ); 
相關問題