给定下面的控制器
public class MyController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Test()
{
return RedirectToRoute(new { action = "Index" });
}
}
而这个路由
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Route1",
"Route1",
new {controller = "Account", action = "Index"});
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
当我浏览到 My/Test 时,MyController 的测试操作按预期命中。然后RedirectToRoute
结果使用 Route1,因为我已将 Action 指定为“Index”。由于我没有指定控制器,它默认为“帐户”。这按预期命中了 AccountController 的索引操作
如果我将路由更改为下面的代码,那么它的工作方式会有所不同,而不是我所期望的。当我浏览到 My/Test 时,它会重定向到 MyController 的 Index Action 而不是 HomeController 的 Index Action。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
我知道什么时候RedirectToAction
使用,然后 MVC 将推断出当前的控制器,因此这将重定向到 MyController 的索引操作,但 MVC 源代码中的代码注释说RedirectToRoute
不会推断出当前的控制器,我希望通过第一个示例证明了这一点。
有人知道为什么会这样吗?