C# 区域是否使用前缀的布线
在我的应用程序中,我有两个区域:C# 区域是否使用前缀的布线,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,在我的应用程序中,我有两个区域:Portal和Admin。我想在XXXAreaRegistration.cs文件中配置路由 我想要的是/{controller}/{action}用于门户和/admin/{controller}/{action}用于管理面板 我尝试了以下配置以使其成为可能: // AdminAreaRegistration.cs context.MapRoute("Admin", "admin/{controller}/{action}",
Portal
和Admin
。我想在XXXAreaRegistration.cs
文件中配置路由
我想要的是/{controller}/{action}
用于门户
和/admin/{controller}/{action}
用于管理
面板
我尝试了以下配置以使其成为可能:
// AdminAreaRegistration.cs
context.MapRoute("Admin",
"admin/{controller}/{action}",
new { action = "Index", controller = "Admin" });
// PortalAreaRegistration.cs
context.MapRoute("Portal",
"{controller}/{action}",
new { action = "Index", controller = "Portal" });
对于
/
我得到了我的Portal/Index.cshtml
,但是对于/admin
我得到了404
。。。我假设在第二种情况下,它在Portal
区域中查找AdminController
,这就是我得到404
的原因。但是如何创建这样一个路由呢?当您调用路由搜索时,因为默认控制器是admin,所以在代码中设置默认参数为existing control
我猜在诸如admin之类的区域没有控制
名称空间向上
修复代码如下所示
context.MapRoute("Admin",
"admin/{controller}/{action}",
new { action = "Index", controller="Home"},
new string[] { "MyApp.Admin.Controllers" } // specify the new namespace);
要解决当前存在的路由冲突,请向门户区域注册添加约束:
// PortalAreaRegistration.cs
context.MapRoute(
"Portal",
"{controller}/{action}",
new { action = "Index", controller = "Portal" },
new { controller = "^(?!.*admin).*$" }
);
这将确保门户区域将映射到除admin/*
之外的所有{controller}/{action}
,因为您希望管理区域提供此服务
当然,除了显而易见的原因之外,您不能在门户区域中使用名为AdminController
的控制器。效果非常好:)谢谢您,先生!