RedirectToRoute提示No route matches the supplied values 问题原因咨询
我之前也踩过这个坑!核心问题是你搞混了路由名称和URL路径的区别——RedirectToRoute方法是根据路由的名称来匹配的,而不是直接用浏览器里输入的URL路径字符串。
下面给你拆解几个最常见的原因和解决办法:
1. 用了URL路径而非路由名称
比如你的路由配置可能是这样的(拿ASP.NET举例):
routes.MapRoute( name: "FooRedirectRoute", // 这是路由的「名称」,是RedirectToRoute要找的标识 url: "bar", // 这是对外暴露的URL路径 defaults: new { controller = "Foo", action = "Index" } );
如果你写RedirectToRoute("bar"),系统会去寻找名为"bar"的路由,但你的路由名称是FooRedirectRoute,自然会提示找不到匹配的路由。正确的写法应该是用路由名称:
return RedirectToRoute("FooRedirectRoute");
2. 缺少路由必需的参数
如果你的路由定义包含必填参数,比如:
routes.MapRoute( name: "FooWithIdRoute", url: "bar/{id}", defaults: new { controller = "Foo", action = "Details" } );
这时候调用RedirectToRoute必须传递对应的id参数,否则系统无法匹配到完整的路由:
// 错误:缺少id参数 return RedirectToRoute("FooWithIdRoute"); // 正确:带上必填参数 return RedirectToRoute("FooWithIdRoute", new { id = 456 });
3. 多区域/命名空间项目未指定区域信息
如果你的路由是在某个Area下定义的,那重定向时需要明确指定Area参数,否则系统会在全局路由池里找,自然找不到对应Area里的路由:
return RedirectToRoute(new { area = "Member", routeName = "FooAreaRoute" });
快速排查步骤
- 打开你的路由配置文件,找到对应
/bar路径的路由条目,记下它的name属性值; - 检查
RedirectToRoute的参数是不是这个名称,而不是bar; - 如果路由有参数,确认所有必填参数都已正确传递;
- 多区域项目的话,加上Area参数再试试。
内容的提问来源于stack exchange,提问作者Dan Friedman
相关产品推荐
相关产品推荐

