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

使用MapControllerRoute时RedirectToAction传递id参数变为0的问题

问题分析与解决方案

问题根源

你定义的ViewAct路由里,给id设置了默认值""(空字符串),但目标动作Act1的id参数是long类型。当从其他控制器用RedirectToAction跳转时,路由系统会优先匹配这个自定义路由,把空字符串赋值给long类型的id,空字符串转long的结果就是0,所以出现参数异常。

而从Act1内部重定向时,当前请求上下文已经存在id的有效值,路由系统会直接复用,不会触发默认值覆盖;删掉自定义路由后,使用默认路由规则,不会强制用空字符串覆盖传入的参数,因此参数能正常传递。另外,你路由配置里的action写的是"Act",但实际动作是"Act1",这也是潜在的匹配问题诱因。

修复方案

方案1:移除id的默认值

因为路由模板里的{id}是必填项,不需要设置默认值,直接修改路由配置:

app.MapControllerRoute(
    "ViewAct",
    "Cont1/Act1/{id}/{title?}",
    new { controller = "Cont1", action = "Act1" });

方案2:设置匹配参数类型的默认值

如果需要保留默认值,改成符合long类型的默认值:

app.MapControllerRoute(
    "ViewAct",
    "Cont1/Act1/{id}/{title?}",
    new { controller = "Cont1", action = "Act1", id = 0L });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:19:56