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

AspNet Core MVC Area路由未按预期工作,URL生成异常求助

问题分析与解决

首先,你的路由配置顺序搞反了!ASP.NET Core的路由匹配是按注册顺序优先匹配的,你先注册了默认的default路由,再注册Area路由,导致路由系统先尝试用默认路由模板来生成URL——但默认路由里没有area参数,所以它就把area=Admin当成查询字符串拼到URL后面了,而不是用Area的路由模板。

解决步骤:

1. 调整路由注册顺序

把MapAreaControllerRoute移到MapControllerRoute前面,因为Area路由是更具体的路由规则,应该让它先被匹配。修改后的Configure方法代码如下:

app.UseEndpoints(endpoints => { 
    // 先注册Area路由
    endpoints.MapAreaControllerRoute( 
        name: "areas", 
        areaName: "Admin", 
        pattern: "{area}/{controller=Home}/{action=Index}/{id?}" 
    ); 
    // 再注册默认路由
    endpoints.MapControllerRoute( 
        name: "default", 
        pattern: "{controller=Home}/{action=Index}/{id?}"); 
    endpoints.MapRazorPages(); 
}); 

2. 确认控制器已标记Area特性

另外,别忘了你的Admin Area下的Home控制器,必须加上[Area("Admin")]特性,否则路由系统无法识别它属于Admin Area:

[Area("Admin")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

为什么这样改?

路由系统在生成URL时,会按你注册路由的顺序依次尝试匹配路由模板。当你把Area路由放在前面,它会先匹配到包含{area}参数的模板,这样就能正确生成https://localhost:44321/Admin/Home/Index这样的URL,而不是把area作为查询参数。

如果还是有问题,可以检查一下你的Area目录结构是否正确:应该是Areas/Admin/Controllers/HomeController.cs,对应的视图在Areas/Admin/Views/Home/Index.cshtml,目录结构不对也会导致路由异常哦。

内容的提问来源于stack exchange,提问作者Haseeb Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:08:14