asp.net core mvc路由机制包含传统路由和属性路由两种方式:传统路由在program.cs中通过mapcontrollerroute集中配置,如"{controller=home}/{action=index}/{id?}";属性路由则通过[route]、[httpget]等特性在控制器或动作方法上直接定义,支持精准路径控制与参数约束(如{id:int}),二者可共存但需避免冲突。

要在控制器中配置基础路由规则,必须先明确:路由规则通常不在控制器内部定义,而是由框架的路由系统在独立配置文件或启动阶段集中注册——控制器只负责响应已映射的请求。直接在控制器里写路由逻辑不仅违反MVC分层原则,还会导致路由不可发现、无法调试、难以维护。
CodeIgniter 4 中的正确做法
CodeIgniter 4 要求路由注册必须在 app/Config/Routes.php 文件中完成,且控制器类名必须与文件名严格一致(首字母大写)、继承 BaseController。
第一步:打开 app/Config/Routes.php,找到 $routes 实例。
第二步:使用 get() 或 post() 方法绑定 URL 路径到控制器方法,例如:$routes->get('/contact', 'Contact::index'); —— 这表示访问 /contact 时调用 Contact 控制器的 index() 方法。
第三步:确保 【Contact.php 必须存放在 app/Controllers/ 目录下,且类名为 Contact(非 contact 或 ContactController)】,否则 404 错误无法避免。
第四步:若需支持带参数的路径(如 /user/123),用占位符写法:$routes->get('/user/(:num)', 'User::view/$1');,其中 $1 会自动注入到 view() 方法的第一个参数。
ASP.NET Core MVC 中的两种方式
方法一:传统路由(集中式配置)
在 Program.cs 中调用 MapControllerRoute:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}" );
该模式依赖控制器和动作方法的命名约定,URL /products/list 会自动匹配 ProductsController.List() —— 【控制器名必须以 Controller 结尾,且类名是 ProductsController,不是 ProductsCtrl】。
方法二:属性路由(更灵活、更直观)
在控制器类上加 [Route("api/[controller]")],再在具体动作上加 [HttpGet("details/{id}")],这样 GET /api/products/details/5 就精准指向该方法。
注意:启用属性路由后,传统路由仍可共存,但需确保两者不冲突;若仅用属性路由,可删掉默认的 MapControllerRoute 调用。
静态路由(网络设备层面)
这不是控制器的事,而是路由器或三层交换机的配置任务。比如在华为设备上执行:ip route-static 192.168.10.0 255.255.255.0 10.0.0.1,告诉设备“去 192.168.10.0/24 网段的数据包,下一跳是 10.0.0.1”。
这一步操作起来很简单,直接在设备命令行输入即可,但前提是接口 IP 已配通、下一跳可达——【未验证下一跳连通性就提交路由,会导致整段流量黑洞】。










