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

ASP.NET 6中如何在脚手架生成的Area的Program.cs中正确配置app.MapControllerRoute

ASP.NET 6中Area路由的正确配置方式

没问题,我来帮你理清ASP.NET 6里Area路由的配置逻辑!

ASP.NET 6采用了顶级语句的极简开发模式,确实移除了传统的Startup.cs,所有中间件和路由配置都直接在Program.cs里完成。你给出的两种写法都是完全符合要求的,它们本质上是等价的,只是语法形式不同:

两种写法的说明

写法一(兼容传统风格)

这种写法沿用了ASP.NET Core 3.x/5.x时期的UseEndpoints包裹方式,把所有端点配置放在一个委托内管理,代码结构更集中:

app.UseEndpoints(endpoints => { 
  endpoints.MapControllerRoute( 
    name: "Admin", 
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); 
  endpoints.MapControllerRoute( 
    name: "default", 
    pattern: "{controller=Home}/{action=Index}/{id?}"); 
  endpoints.MapRazorPages(); 
})

写法二(ASP.NET 6推荐简化写法)

这是ASP.NET 6官方主推的简化写法,直接通过app.MapXXX()系列方法配置路由,不需要嵌套UseEndpoints,更贴合顶级语句的简洁风格:

app.MapControllerRoute( 
  name: "Admin", 
  pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); 
app.MapControllerRoute( 
  name: "default", 
  pattern: "{controller=Home}/{action=Index}/{id?}"); 
app.MapRazorPages();

关键注意事项

不管用哪种写法,路由的注册顺序至关重要:带有Area的路由(你的"Admin"路由)必须优先于默认路由注册!因为ASP.NET Core的路由系统是按注册顺序匹配请求的,如果默认路由先注册,不带Area的请求会被优先匹配,而带Area的请求可能无法正确命中对应的Area控制器,导致Area功能失效。你的两种写法都遵循了这个顺序,这点做得非常正确。

另外,如果项目中使用了Razor Pages,app.MapRazorPages()的位置不影响Area路由的匹配,但建议放在所有路由配置的最后,保持代码逻辑的清晰性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:53:10