如何将ASP.NET Core默认路由指向区域内控制器的Action
如何直接将区域内的控制器Action设为ASP.NET MVC默认路由?
你遇到的页面找不到错误,核心原因是默认路由没有指定区域参数:当访问根路径http://localhost:56893/时,MVC会尝试在根命名空间下查找AccountController,而不是你标记了[Area("Dashboard")]的那个区域控制器,所以返回404。
下面是两种无需重定向的直接配置方案:
方案一:修改默认路由,添加区域默认值
直接在默认路由的defaults中指定默认区域为Dashboard,这样根路径请求会自动匹配到该区域下的Account/Index:
app.UseMvc(routes => { // 保留原有的区域路由规则 routes.MapRoute( name: "areas", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); // 修改默认路由,添加area默认值 routes.MapRoute( name: "default", template: "{controller=Account}/{action=Index}/{id?}", defaults: new { area = "Dashboard" }); });
这个方案最简洁,适合根路径固定指向某个区域的场景。
方案二:添加根路径专属的区域路由
通过MapAreaRoute创建一个专门匹配根路径的区域路由,需要注意路由顺序(MVC会按从上到下的顺序匹配路由,所以要把这个根路由放在最前面):
app.UseMvc(routes => { // 根路径直接指向Dashboard区域的Account/Index routes.MapAreaRoute( name: "dashboard-root", areaName: "Dashboard", template: "", // 空模板匹配根路径 defaults: new { controller = "Account", action = "Index" }); // 常规区域路由 routes.MapRoute( name: "areas", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); // 可选:根目录下的其他控制器路由(如果需要支持根路径访问非区域控制器) routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
这个方案更灵活,后续如果需要调整根路径的指向,只需要修改这个专属路由即可,不会影响其他路由规则。
注意事项
请确认你的AccountController确实正确标记了区域特性:
[Area("Dashboard")] public class AccountController : Controller { public IActionResult Index() { return View(); } }
内容的提问来源于stack exchange,提问作者CBreeze
相关产品推荐
相关产品推荐

