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

如何在Program.cs中配置MapControllerRoute实现两类URL的路由映射?

解决方案

你需要调整路由的定义顺序和category路由的匹配规则,确保更具体的路由优先被匹配,同时正确传递分类参数。修改后的完整代码如下:

// 先配置分类路由(更具体的路由必须放在默认路由前面)
app.MapControllerRoute(
    name: "category",
    pattern: "{category}", // 用{category}匹配单段路径,比如/CategoryNameHere
    defaults: new { controller = "Category", action = "Index" });

// 保留默认路由,处理根路径及常规控制器/方法路由
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

关键说明

  • 路由顺序优先级:因为默认路由的{controller}会匹配任意单段路径(比如/Category会被默认路由解析为Controller=Category),所以必须把分类路由放在默认路由前面,确保/CategoryNameHere这类请求先被分类路由捕获。
  • 参数自动绑定:路由中的{category}会自动对应到CategoryController.Index(string category)的参数,ASP.NET Core会把路径里的CategoryNameHere字符串作为参数值传入方法。
  • 根路径匹配:默认路由的controller=Home和action=Index默认值会自动匹配根路径/,正确指向HomeController.Index()。

验证示例

  • 访问/:触发HomeController.Index()
  • 访问/Books:触发CategoryController.Index("Books")
  • 访问/Home/Contact:依然通过默认路由正常访问HomeController.Contact()(如果该方法存在)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:52:32