RedirectToAction导致ASP.NET MVC 3中“路由表中没有路由与提供的值匹配”

时间:2011-09-21 17:47:39

标签: asp.net-mvc asp.net-mvc-3

我有一个项目,我最近升级到ASP.NET MVC 3.在我的本地计算机上,一切正常。当我部署到服务器时,每次使用RedirectToAction调用时都会收到错误消息。它抛出System.InvalidOperationException错误消息路由表中没有路由与提供的值匹配。我的假设是服务器上存在一些配置问题,但我似乎无法能够搞清楚。

6 个答案:

答案 0 :(得分:21)

当我跨区域重定向时,我遇到了MVC3中的区域。正如其他人所说,Glimpse在这里非常有用。

我的解决方案是在路径值参数更改中传递区域:

return RedirectToAction("ActionName", "ControllerName");

为:

return RedirectToAction("ActionName", "ControllerName", new { area = "AreaName" });

答案 1 :(得分:6)

我曾在RedirectToAction遇到类似的问题,并发现您需要注册的有效路线才会导致该操作。

答案 2 :(得分:3)

查看一瞥,看看是否可以获得一些路由调试信息: http://getglimpse.com/

答案 3 :(得分:1)

您可以将路由表添加到RouteConfig.cs文件中,如下所示:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapMvcAttributeRoutes();

        var namespaces = new[] { typeof(HomeController).Namespace };

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute("name", "url", new { controller = "controllerName", action = "actionName" }, namespaces);
    }

注意:“网址”是您在地址栏中输入的内容:localhost:/ home

设置路线后,请使用RedirectToRoute("url")

或者如果您更喜欢RedirectToAction(),那么您不需要设置上述路线,请使用默认值。 RedirectToAction(string action name, string controller name);

我希望这会有所帮助。

答案 4 :(得分:0)

与不使用MVC 3.0的路由中的尾部斜杠存在差异。 MVC 2.0对它们没有问题。即,如果您更改以下内容:

"{controller}.mvc/{action}/{id}/"

为:

"{controller}.mvc/{action}/{id}"

它应该解决这个问题(来自this thread,为我工作)。即使您使用升级向导移动到MVC 3.0,仍然会抛出InvalidOperationException。我不知道这是否是Schmalls所说的。

答案 5 :(得分:0)

在我的情况下,缺少默认路由:

routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);