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

ASP.NET Core 6 MVC如何在MapControllerRoute中定义路由变量类型

ASP.NET Core 6 MVC 中MapControllerRoute路由变量类型/匹配规则配置

在app.MapControllerRoute()中定义路由变量的类型、格式匹配规则,是通过路由约束参数实现的,和你贴出的旧版路由写法逻辑一致,具体实现如下:

正确配置代码

在Program.cs的中间件配置段,写入如下路由配置即可:

// 其他中间件配置(如静态文件、身份认证等)
app.MapControllerRoute(
    name: "MoviesByReleaseDate",
    pattern: "movies/released/{year}/{month}",
    defaults: new { controller = "Movies", action = "ByReleaseDate" },
    constraints: new { 
        year = @"\d{4}",  // 限定year匹配4位数字
        month = @"\d{2}"  // 限定month匹配2位数字
    }
);

// 默认兜底路由
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

配置说明

  • 第四个参数constraints就是专门用来定义路由变量约束的位置,支持传入正则表达式、内置类型约束来限定变量的格式、类型,不符合约束规则的请求路径不会匹配到当前路由。
  • 你原有代码中Action名写为"ByRelease Date"带空格是笔误,C#方法名不允许包含空格,需要和控制器中实际的Action方法名完全一致,这里修正为"ByReleaseDate"。
  • 如果需要做更严格的规则校验,可以调整正则表达式,比如把month的规则改成@"0[1-9]|1[0-2]",就可以过滤掉13、00这类无效月份的路径。

匹配效果示例

可正常匹配的路径:/movies/released/2024/10,会路由到Movies控制器下的ByReleaseDate方法,方法可直接接收year=2024、month=10两个参数
无法匹配的路径:/movies/released/24/5,因为年份只有2位、月份只有1位,不满足约束规则,不会命中该路由。

内容的提问来源于stack exchange,提问作者Jordi van Cuijlenborg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:06:12