You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:06