2012-04-06 118 views
1

我想将我的MVC项目分成多个区域。所以我有3个领域1)crm 2)服务3)网络。我希望PublicWeb成为我的默认网站。这意味着它应该像www.mysitename.com/mycontroller/myaction(中间没有区域名称)和其他两个区域名称(www.mysitename.com/crm/mycontroller/myaction)一样访问。什么路由/区域配置我应该有?我试过AreaRegistration.RegisterAllAreas();,它只适用于我的默认网页(网页)。当我访问其他2时,它抛出404错误。ASP.NET MVC区域路由不能使用默认路由

我试图像下面的一个

 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作品indidually注册。但是当我访问我的论坛时,它抛出了这个错误,

发现多个类型与名为'home'的控制器相匹配。如果为该请求提供服务的路由('crm/{controller}/{action}/{id}')没有指定命名空间来搜索与该请求匹配的控制器,就会发生这种情况。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由。

我对web RegisterArea功能是本

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

我认为乔纳森小号的解决方案是绝对值得一试,但你可能会考虑不同的方法。这将是你的web文件在默认位置。当没有区域是请求的一部分时,路由引擎不会查看这些文件的区域。

2

从我所看到的区域路线看起来不错。您是否更新了Global.asax中的默认路由以将请求发送到Web区域?

喜欢的东西:

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

是的,即时通讯尝试了很多使用默认路由和区域,所以这应该是正确的解决方案。 – 2017-10-15 14:16:07