
示例工程【免费下载链接】practical-aspnetcorePractical samples of ASP.NET Core 11, 10, 9, 8.0, 7.0, 6.0, 5.0, 3.1, 2.2, and 2.1,projects you can use. Readme contains explanations on all projects.项目地址https://gitcode.com/gh_mirrors/pr/practical-aspnetcore点击查看免费下载约定式路由Convention Based Routing是 ASP.NET Core MVC 中最经典的路由组织方式它通过一段集中定义的 URL 模板如{controller}/{action}/{id}来统一推导哪个控制器、哪个动作方法处理请求而无需在每个控制器或 Action 上逐个书写[Route]特性。在 ASP.NET Core 端点路由Endpoint Routing时代这一能力由扩展方法IEndpointRouteBuilder.MapControllerRoute提供。本指南以practical-aspnetcore仓库中的 new-routing-20 示例项目为蓝本完整讲解如何用MapControllerRoute注册带默认值defaults的命名路由、如何叠加通用默认路由{controllerHome}/{actionIndex}/{id?}以及约定式路由与属性路由、区域路由MapAreaControllerRoute之间的分工与取舍。读完本文你将能够在自己的 ASP.NET Core 项目中独立配置 MVC 约定式路由并理解其背后的匹配顺序与链路。示例项目结构一览示例位于 projects/endpoint-routing/new-routing-20是一个面向net10.0的极简 MVC 项目目录结构如下projects/endpoint-routing/new-routing-20/ ├── Controllers/ │ ├── AdminController.cs │ └── HomeController.cs ├── Views/ │ └── Home/ │ └── Index.cshtml ├── Program.cs ├── new-routing-20.csproj └── README.md项目文件 new-routing-20.csproj 只声明了 Web SDK 与目标框架没有引入任何额外 NuGet 包——MVC 框架本身随Microsoft.NET.Sdk.Web提供Project SdkMicrosoft.NET.Sdk.Web PropertyGroup TargetFrameworknet10.0/TargetFramework ImplicitUsingstrue/ImplicitUsings LangVersionpreview/LangVersion /PropertyGroup /Project其中ImplicitUsings启用了隐式 using因此 Program.cs 无需显式using Microsoft.AspNetCore.Builder即可直接调用MapControllerRoute。核心思路MapControllerRoute 与约定式路由本示例在 Program.cs 中展示了约定式路由的标准三步流程var builder WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app builder.Build(); app.MapControllerRoute(Admin, Admin, new { Controller Admin, Action Index }); app.MapControllerRoute(About, About, new { Controller Home, Action About }); app.MapControllerRoute(Default, {controllerHome}/{actionIndex}/{id?}); app.Run();可以拆解为三个关键环节注册 MVC 服务builder.Services.AddControllersWithViews()将 MVC含视图支持加入依赖注入容器。这是后续所有MapControllerRoute调用能够生效的前提——端点路由的 MVC 端点构建器依赖这些服务完成控制器发现、动作选择与路由匹配。声明路由app.MapControllerRoute是IEndpointRouteBuilder上的扩展方法它将一条约定式路由注册为一个命名端点named endpoint。运行app.Run()启动应用端点路由中间件随后会按注册顺序对入站请求执行匹配。提示MapControllerRoute与更古老的IApplicationBuilder.UseMvc不同它不再接管整个中间件管道而是仅仅在端点路由体系中追加一个端点。这也正是Endpoint Routing 时代的约定式路由与传统 MVC 5/ASP.NET Core 2.x 时代UseMvcWithDefaultRoute最本质的区别。三个参数name、pattern 与 defaultsMapControllerRoute最常用的重载签名可以理解为MapControllerRoute(name, pattern, defaults)以示例中的第一条路由为例app.MapControllerRoute(Admin, Admin, new { Controller Admin, Action Index });name路由名这里为Admin。命名路由的价值在于可以被 URL 生成机制引用——例如在 Razor 视图中使用 Tag Helper、或通过IUrlHelper.RouteUrl/LinkGenerator按名字生成链接。路由名在同一应用中必须唯一否则注册时会抛出ArgumentException。patternURL 模板这里为字面量Admin表示请求路径必须是/Admin才会命中这条路由。defaults默认值通过匿名对象new { Controller Admin, Action Index }提供。当请求命中/Admin且 URL 中没有携带controller/action段时路由系统会用这两个默认值补全路由值从而定位到AdminController.Index。同理第二条路由将字面量路径/About映射到HomeController.Aboutapp.MapControllerRoute(About, About, new { Controller Home, Action About });这种用字面量模板 默认值的组合非常适合为需要固定、好记、对外稳定的 URL如管理后台、关于页建立别名式路由而无需在这些 Controller 的 Action 上书写[Route]特性。通用默认路由 {controllerHome}/{actionIndex}/{id?}第三段路由是经典的 MVC 默认路由app.MapControllerRoute(Default, {controllerHome}/{actionIndex}/{id?});它把三件事压缩在一个模板里模板片段含义说明{controllerHome}可选的控制器段缺省时使用Home访问/时会映射到HomeController{actionIndex}可选的 Action 段缺省时使用Index与上一条配合/命中HomeController.Index{id?}可选的id参数段带?表示可为空如/Home/Index/42会把42绑定到 Action 的id参数因此该模板实际上等价于/Home/Index、/Home、/都能被匹配并分别补全缺失的默认值。仓库中 new-routing-3 演示了这条默认路由的快捷写法——直接调用app.MapDefaultControllerRoute()其内部注册的正是同样的{controllerHome}/{actionIndex}/{id?}模板。注意默认值语法模板内用{controllerHome}等号表示缺省值而id后加?表示可选段二者含义不同——前者是值级默认后者是段级可选。这是约定式路由模板最容易混淆的地方之一。路由匹配顺序先注册的优先MapControllerRoute的注册顺序决定了匹配优先级路由表按注册顺序依次尝试先注册的路由优先命中。在本示例中请求/Admin→ 命中第一条命名路由Admin交由AdminController.Index处理返回Admin Page纯文本。请求/About→ 命中第二条命名路由About交由HomeController.About处理返回About Page纯文本。请求/、/Home、/Home/Index→ 命中第三条默认路由交给HomeController.Index由 Index.cshtml 渲染页面。Index.cshtml 中给出了两条可直接点击验证的链接h1Home Page - Convention based Routing/h1 Use IEndpointRouteBuilder.MapControllerRoute to configure convention based routing. ul lia href/Admin/Admin/a/li lia href/About/About/a/li /ul页面标题与列表本身即是对 README 主题的运行时验证——浏览器访问/看到该页面再点击/Admin与/About即可观察到路由分别被分发到两个不同控制器。对应地Controllers/HomeController.cs 与 Controllers/AdminController.cs 的实现非常直观public class HomeController : Controller { public IActionResult Index() View(); public IActionResult About() Content(About Page); } public class AdminController : Controller { public IActionResult Index() Content(Admin Page); }注意两个控制器都没有写任何[Route]特性完全依赖约定式路由完成寻址——这正是约定式路由与属性路由的分水岭。约定式路由 vs 属性路由 vs 区域路由与属性路由Attribute Routing的分工IEndpointRouteBuilder上还提供了MapControllers()用于启用属性路由。仓库中的 new-routing-2 展示了对照场景它只调用app.MapControllers()并依靠类上的[Route()]特性完成路由README 明确注明本示例不启用约定式路由。两者可以共存于同一应用MapControllerRoute负责约定式路由[Route]/[HttpGet]特性负责属性路由二者的端点会同时进入端点路由表。一般而言约定式路由适合URL 结构统一、由模板驱动的站点型应用属性路由适合URL 形态灵活、需要精细化控制的 API 型应用。与区域路由Area Routing的关系约定式路由的区域变体由MapAreaControllerRoute提供。仓库中的 new-routing-16 展示了如何同时注册Admin与Customer两个区域app.MapAreaControllerRoute(AdminArea, Admin, Admin/{controllerHome}/{actionIndex}/{id?}); app.MapAreaControllerRoute(CustomerArea, Customer, Customer/{controllerHome}/{actionIndex}/{id?}); app.MapDefaultControllerRoute();其区域名Admin、Customer必须与控制器上[Area()]特性声明的区域名一致。MapControllerRoute与MapAreaControllerRoute同属约定式路由家族前者面向普通控制器后者面向带区域的控制器。运行与验证在仓库根目录下执行以下命令即可运行本示例cd projects/endpoint-routing/new-routing-20 dotnet run也可先dotnet restore再运行该项目不依赖外部包restore 过程很快。启动后按顺序验证访问路径预期结果/渲染 Index.cshtml 首页/Admin输出纯文本Admin Page来自 AdminController.Index/About输出纯文本About Page来自 HomeController.About这三条结果正好分别对应Program.cs中注册的三条路由是命名路由 默认值 通用模板三种用法的可运行佐证。小结IEndpointRouteBuilder.MapControllerRoute是 ASP.NET Core 端点路由体系中配置 MVC 约定式路由的标准入口。通过 new-routing-20 示例可以看到仅凭三段代码即可实现为/Admin、/About建立带默认值的命名路由并保留{controllerHome}/{actionIndex}/{id?}通用回退。掌握name/pattern/defaults三个参数、理解模板默认值与可选段的语法差异、遵循先注册先匹配的顺序原则就能在真实项目中自如地组织 MVC 的 URL 空间当需要为控制器补充更灵活或分区域的寻址时再结合 MapControllers 与 MapAreaControllerRoute 即可形成完整的路由体系。相关示例索引可参见 endpoint-routing 目录总览其中收录了 30 余个端点路由场景Razor Pages 映射、默认路由、RequestDelegate、Fallback、主机匹配、动态路由等可作为路由主题的延伸阅读清单。赞分享示例工程【免费下载链接】practical-aspnetcorePractical samples of ASP.NET Core 11, 10, 9, 8.0, 7.0, 6.0, 5.0, 3.1, 2.2, and 2.1,projects you can use. Readme contains explanations on all projects.项目地址https://gitcode.com/gh_mirrors/pr/practical-aspnetcore点击查看免费下载相关推荐semantic-router 基于 MCP 的自定义路由分类指南MCP Based Routingsemantic router 基于 MCP 的自定义路由分类指南MCP Based Routing 本指南讲解如何在 semantic router 中使后端API网关模型推理服务AI Agent使用 TanStack Router CLI 安装并配置文件路由File-based Routing使用 TanStack Router CLI 安装并配置文件路由File based Routing 本文面向希望在不使用 Vite/Rspack 等受支持前端路由SSRGBrain Brain Routing 约定全解基于 Brain × Source 双轴的路由决策指南GBrain Brain Routing 约定全解基于 Brain × Source 双轴的路由决策指南 本文是 GBrainGarrys Opinion人工智能RAGAgent 记忆MCP 服务知识管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考