2012-04-06 4 views
1

Я пытаюсь разделить мой проект MVC на несколько областей. Итак, у меня есть 3 области 1) crm 2) услуги 3) Web. Я хочу, чтобы PublicWeb был моим дефолтом. это означает, что к нему следует обращаться, например, www.mysitename.com/mycontroller/myaction (без имени области между ними) и других двух, к которым нужно получить доступ с именем области (www.mysitename.com/crm/mycontroller/myaction). Какую конфигурацию маршрутизации/области я должен иметь? Я пробовал AreaRegistration.RegisterAllAreas();, и он работает только для моего по умолчанию (в Интернете). Когда я получаю доступ к другим 2, он сбросил ошибку 404.ASP.NET MVC Области маршрутизации не работают с маршрутом по умолчанию

Я попытался indidually зарегистрироваться как ниже одного

 var area2reg = new crmAreaRegistration(); 
     var area2context = new AreaRegistrationContext(area2reg.AreaName, RouteTable.Routes); 
     area2reg.RegisterArea(area2context); 

     var area1reg = new webAreaRegistration(); 
     var area1context = new AreaRegistrationContext(area1reg.AreaName, RouteTable.Routes); 
     area1reg.RegisterArea(area1context); 

Тогда мои publicweb работ. Но когда я обращаюсь к своему форуму, он перебрасывал эту ошибку,

Было найдено несколько типов, соответствующих контроллеру с именем 'home'. Это может произойти, если маршрут, обслуживающий этот запрос ('crm/{controller}/{action}/{id}'), не определяет пространства имен для поиска контроллера, который соответствует запросу. Если это так, зарегистрируйте этот маршрут, вызвав перегрузку метода «MapRoute», который принимает параметр «namespaces».

Моя RegisterArea функция web это

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "web_default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

     ); 
    } 

и один для crm является это

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "crm_default", 
      "crm/{controller}/{action}/{id}", 
      new { controller = "home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

Как я справиться с этим?

ответ

1

Я думаю, что решение Джонатана S, безусловно, стоит попробовать, но вы могли бы рассмотреть другой подход. Это будет помещать ваши файлы web в местоположения по умолчанию. Механизм маршрутизации не будет выглядеть в области для этих файлов, если ни одна из областей не является частью запроса.

2

Из того, что я вижу, маршруты в районе выглядят прекрасно. Вы обновили маршрут по умолчанию в своем Global.asax для отправки запросов в веб-зону?

Что-то вроде:

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

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", 
      new { area = "web", controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

    } 
+0

Да, я много пытался использовать маршрутизацию по умолчанию и область вместе. Так что это должно быть правильным решением. –

Смежные вопросы