2012-08-26 5 views
2

This Is My Controllers в корне (без города):MVC3 MapRoute Неоднозначности между Именем контроллера без площади и равного Название района

  • Главной
  • Пользователей

И Мои районы являются:

+ Общие

  • Controller1
  • Controller2

+ Пользователи

  • Управления
  • Участник

Так Моя Login Действия в членах контроллера (в корне) перед тем, как добавить член зоны каждую вещь это нормально, но знаю, что я получаю ошибку 404 для этого URL-адреса (http://MyProject.dev/members/login?Re turnUrl =% 2f)

Так как я могу определить MapRoute, чтобы исправить эту проблему?

Update

я попробовать это в главном 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"} 
     ); 

но это о 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

Вам необходимо определить пользовательские маршруты для вашего региона. Это не хорошо. Вероятно, у вас будут проблемы. Лучше всего не создавать двусмысленность.

Не забывай определить пространство имен в конфигурации Rotes с новой строки []:

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