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

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" });

快速排查步骤

  1. 打开你的路由配置文件,找到对应/bar路径的路由条目,记下它的name属性值;
  2. 检查RedirectToRoute的参数是不是这个名称,而不是bar;
  3. 如果路由有参数,确认所有必填参数都已正确传递;
  4. 多区域项目的话,加上Area参数再试试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:05:34