我正在尝试将我的MVC项目分成多个区域。所以我有3个方面1)crm 2)服务3)Web。我希望PublicWeb成为我的默认版。这意味着它应该被访问,如www.mysitename.com/mycontroller/myaction(中间没有区域名称)和其他两个用区域名称访问(www.mysitename.com/crm/mycontroller/myaction)。我应该有什么路由/区域配置?我尝试了AreaRegistration.RegisterAllAreas();
,它仅适用于我的默认设置(网络)。当我访问其他2时,它引发了404错误。
我试图像下面的那样注册
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);
然后我的公共网络工作。但是,当我访问我的论坛时,它抛出了这个错误,
发现多个类型与名为“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 }
);
}
}
我该如何处理?
答案 0 :(得分: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 }
);
}
答案 1 :(得分:1)
我认为Jonathan S的解决方案绝对值得一试,但您可能会考虑采用不同的方法。那就是将您的web
文件放在默认位置。当没有区域是请求的一部分时,路由引擎不会在区域中查找这些文件。