使用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
相关产品推荐
相关产品推荐

