鉴于以下路线:

routes.MapRoute("Test", "test", new { controller = "Test", action = "Index" });
routes.MapRoute("Default", "{controller}/{action}/{id}",
  new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);


如果我从TestController的Index操作调用RedirectToRoute(“ Default”),它将重定向到/test,但我希望它重定向到/

在调试会话期间将其返回之前,我检查了调用RedirectToRoute(“ Default”)的结果。

RedirectToRouteResult结果= RedirectToRoute(“默认”);

它具有属性RouteName,其值为“ Default”,以及属性RouteValues,其不包含任何元素(计数= 0)。我使用Reflector进行了检查,并且null作为RouteValueDictionary在内部传递。

同样,我希望给定应用程序中定义的路由的默认值,它将重定向到HomeController的Index视图。

为什么不重定向到/

最佳答案

填充到当前操作中的RouteValueDictionary用于填充Controller,Action,ID。这通常是您想要的功能,它使您可以执行<%:Html.ActionLink("MyAction")%>之类的事情,而无需在视图中指定控制器。

要将其强制设为完整的后备默认设置,请使用:

RedirectToRoute("default", null");

第二个参数用于您的路由值,通过指定它,您可以覆盖现有的值。

但是,我想说的首选方法是拥有一个不带任何参数的本地路由。这意味着您的重定向将不需要大量的空值,并且对RedirectToRoute("Home")的调用也很明确。

编辑

这是一个非常古老的答案,正如一些人提到的那样,似乎并没有为他们工作。为了值得,我现在不使用此模式,并在需要突破时显式覆盖控制器和区域。显然,它不仅工作得更好,而且当您回到代码中时,很高兴明确看到您脱离了这种情况,并且意味要消除某些路由值。

为了记录,我也更倾向于基于命名路由的URL生成而不是基于约定的生成。

关于c# - 为什么RedirectToRoute(“Default”)不重定向到根目录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3979154/

10-12 05:24