RedirectToRoute重定向到当前操作,而不是重定向到routename指定的路由

时间:2017-02-05 08:47:42

标签: asp.net-mvc routes url-routing asp.net-mvc-routing redirecttoroute

以下是我的public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "myroute", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "About", id = UrlParameter.Optional } ); } 代码段:

Home/Contact

并且在Home/About我正在重定向到名为" myroute"的路线,该路线映射到Home/About。它不是重定向到Home/Contact,而是重定向到相同的操作(HomeController)。以下是我的 public ActionResult Index() { return View(); } public ActionResult About() { return View(); } public ActionResult Contact() { return RedirectToRoute("myroute"); } 代码:

myroute

为什么重定向到ProcessInput无效?

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

当您使用RedirectToRouteHtml.RouteLinkUrl.RouteUrl以及允许您按名称指定路线的相关方法时,该名称就像一个额外的过滤器。基本上,这意味着路径只能匹配名为"myroute"的路由,但您仍需要提供controlleraction以及任何其他所需的路由值为了匹配那条路线。

RedirectToRoute("myroute", new { controller = "Home", action = "About" })

请注意,注释中提供的@StephenMuecke的答案也可以,但只能来自Home控制器。如果没有明确提供,MVC会在生成URL时自动重用当前请求中的值。

  

另一方面,这种路由配置从根本上被打破,因为您有2条路由都接受0,1,2和3个路段的长度。基本上,虽然可以生成myroute的URL,但是传入的路由不能与myroute匹配,因为Default配置为始终覆盖它。这可能会导致问题,因为您用于该路径的路径永远不会匹配,这会在您添加更多路径时难以维护。

     

有关此问题的详细信息和可能的解决方案,请参阅Why map special routes first before common routes in asp.net mvc?

答案 1 :(得分:0)

你可以让它变得更容易。使用Response.Redirect(“Home / About”)但我不知道是否还有其他要求。