RedirectToAction() (MVC5)的意外行为

本文关键字:意外 MVC5 RedirectToAction | 更新日期: 2023-09-27 18:14:38

我在尝试使用RedirectToAction()时遇到了问题。

在我的RouteConfig.cs中,我有这样的东西:

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

从我的控制器,如果我尝试这个:

    public ActionResult Contact()
    {
        return RedirectToAction("About", "Home");
    }
我得到这个URL:
http://localhost:51547/myroot/Home/About

这不是我所期望的。如果我这样做:

return RedirectToRoute("Default", new { controller = "Home", action = "About" });
我得到这个URL:
http://localhost:51547/Home/About

这对我来说很有意义。

谁能解释为什么RedirectToAction是添加myroot/前缀的URL,而不是匹配Default路由?

谢谢!

RedirectToAction() (MVC5)的意外行为

请将您的Route order更改为

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

这可能行得通…不是测试

return RedirectToAction("action", "controller", new { area = "" });