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

ASP.NET Core MVC Admin区域URL生成异常:生成?area=Admin而非/Admin/路径的问题排查

ASP.NET Core MVC Admin区域URL生成异常:生成?area=Admin而非/Admin/路径的问题排查

我之前也碰到过一模一样的问题,折腾了好一会儿才找到根源——你的核心问题出在路由注册的顺序上!

问题原因分析

你在Program.cs里先注册了默认路由app.MapDefaultControllerRoute(),之后才注册Admin区域的路由。ASP.NET Core的路由系统是按注册顺序匹配并生成URL的:默认路由没有区域前缀的模板,所以它会把area=Admin作为查询参数附加到URL上,而不是使用你定义的Admin/{controller...}前缀格式,这就导致了404错误(因为你的区域路由模板是带前缀的,而请求的URL不符合这个模板)。

解决方案:调整路由注册顺序

把区域路由的注册代码放到默认路由的前面,让路由系统优先使用区域路由模板来生成URL。修改后的Program.cs路由代码如下:

// 先注册Admin区域路由,确保优先匹配
app.MapAreaControllerRoute(
        name: "Admin",
        areaName: "Admin",
        pattern: "Admin/{controller=Home}/{action=Index}/{id?}"
        );

// 再注册默认路由,处理非区域的请求
app.MapDefaultControllerRoute();

其他验证点(确保万无一失)

调整顺序后,你可以再检查这几个地方确认没问题:

  • 你的CategoryController已经正确添加了[Area("Admin")]特性,这点你已经做到了,没问题。
  • 视图里的Tag Helper语法正确:asp-area="Admin"、asp-controller="Category"、asp-action="Add"(哦对了,你的视图里写的是asp-action="Update"来显示“Add Category”按钮?不过这是小问题,不影响路由生成,只是按钮文本和对应action不匹配,记得改成asp-action="Add"哦)。
  • 区域的文件夹结构正确:Areas/Admin/Controllers、Areas/Admin/Views,从你的视图路径来看是符合规范的。

最后重启一下项目,清理浏览器缓存,再点击按钮就能生成正确的https://localhost:7002/Admin/Category/Add路径啦!

备注:内容来源于stack exchange,提问作者Fakhriyya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:48:06