ASP.NET MVC区域路由不能使用默认路由
问题描述:
我想将我的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 }
);
}
}
如何处理呢?
答
我认为乔纳森小号的解决方案是绝对值得一试,但你可能会考虑不同的方法。这将是你的web
文件在默认位置。当没有区域是请求的一部分时,路由引擎不会查看这些文件的区域。
答
从我所看到的区域路线看起来不错。您是否更新了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 }
);
}
是的,即时通讯尝试了很多使用默认路由和区域,所以这应该是正确的解决方案。 – 2017-10-15 14:16:07