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
相关产品推荐
相关产品推荐

