【问题标题】:asp mvc RedirectToRoute adding current action to the redirectasp mvc RedirectToRoute 将当前操作添加到重定向
【发布时间】:2011-04-15 22:39:01
【问题描述】:

我有一个控制器,它有一个名为 RedirectLogin 的操作,它基本上设置了一个 TempData var,以便在登录完成时重定向回。

在此之后,它只是调用:

return RedirectToRoute("Login");

但是,当它重定向时,它会转到 /login/RedirectLogin - 由于某种原因,它正在添加调用操作的名称。我认为它应该只是返回默认值,而不是添加动作,尤其是不属于目标控制器的动作。

如果我打电话:

return RedirectToRoute("Login", new { action = "Index" });

然后它正确地创建路径 /login,但同样,它不应该在默认情况下这样做,没有额外的位?

我有一个稍微不标准的路由设置。基本上我正在为我的客户创建虚拟子文件夹,所以 www.domain.com/clienturl 但我仍然希望 www.domain.com/join 或 www.domain.com/about 重定向到非客户端数据。我通过直接在路径中添加控制器的名称来做到这一点,并将其添加到更通用的称为 Landing 的名称之前。这可能是问题所在,还是有更好的方法:)

        // Root paths
        routes.MapRoute("About", "about", new { controller = "Home", action = "About" });
        routes.MapRoute("Info", "info", new { controller = "Home", action = "Info" });
        routes.MapRoute("Privacy", "privacy", new { controller = "Home", action = "Privacy" });
        routes.MapRoute("Terms", "terms", new { controller = "Home", action = "Terms" });

        // Root controllers
        routes.MapRoute("Join", "join/{action}/{id}", new { controller = "join", action = "Index", id = UrlParameter.Optional });
        routes.MapRoute("Login", "login/{action}/{id}", new { controller = "login", action = "Index", id = UrlParameter.Optional });
        routes.MapRoute("Account", "account/{action}/{id}", new { controller = "account", action = "Index", id = UrlParameter.Optional });
        routes.MapRoute("Goodbye", "goodbye/{action}/{id}", new { controller = "goodbye", action = "Index", id = UrlParameter.Optional });

        // Organization
        routes.MapRoute("Landing", "{organization}/{controller}/{action}/{id}", new { controller = "Landing", action = "Index", id = UrlParameter.Optional });

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

【问题讨论】:

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


    【解决方案1】:

    它正在重用当前请求中的数据。因为您有可选参数“action”,所以它从您当前的请求中获取操作参数,谁的操作是 RedirectLogin,并将其附加到 url。我会在没有可选参数的情况下为您的登录页面创建一个特定的路由条目,或者重定向到操作而不使用命名路由。 Pro ASP.NET MVC 2 一书中有一个页面更详细地解释了正在发生的事情。

    【讨论】:

      【解决方案2】:

      您不妨尝试以下替代方案:

      RedirectToAction(String, String, RouteValueDictionary);
      RedirectToAction(String, RouteValueDictionary);
      Redirect("~/login"); // Note, this works but if you move around the urls for your routes you'll need to fix it everytime... not recommended
      

      此处的 MSDN 文章显示了控制器上的所有可用方法:http://msdn.microsoft.com/en-us/library/system.web.mvc.controller_methods%28v=VS.98%29.aspx

      不要将 RedirectToActionPermanent 或 RedirectToRoutePermanent 用于此目的...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 2015-10-31
        相关资源
        最近更新 更多