由于2个类似的路由导致意外的重定向url

时间:2014-11-30 13:19:56

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

我的应用程序使用多个路由。这是两个相关的:

routes.MapRoute(name: "MyRoute",
                url: "Flow",
                defaults: new { controller = "MyCtrl1", action = "Index" });

routes.MapRoute(name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "MyCtrl2", action = "Index", id = UrlParameter.Optional });

现在我有Action返回:

return RedirectToAction("Index", "Flow", new {Id = <currId>});

现在框架可能会进行优化("Default"路由的默认action名为"Index"),重定向网址我得

https://<host>/Flow?Id=<currId>

预期网址为:

https://<host>/Flow/Index?Id=<currId>

我的问题是我希望"Default"路由处理请求而"MyRoute"处理它。
看起来框架进行了优化,忘记了在优化后是否改变了预期路线。

我的问题:

  1. 你看到我的路线出了什么问题吗?或者这是一个框架错误?
  2. 有没有办法阻止这些优化并返回Flow/Index

3 个答案:

答案 0 :(得分:0)

使用返回RedirectToRoute(),而不是使用返回RedirectToAction()。您可以在返回RedirectToRoute(“MyRoute”)中设置自定义路线名称。

参考此链接

http://www.codeproject.com/Articles/641783/Customizing-Routes-in-ASP-NET-MVC

http://www.dotnet-tricks.com/Tutorial/mvc/4XDc110313-return-View%28%29-vs-return-RedirectToAction%28%29-vs-return-Redirect%28%29-vs-return-RedirectToRoute%28%29.html

答案 1 :(得分:0)

受保护的内部RedirectToRouteResult RedirectToAction(     string actionName,     字符串controllerName )

return RedirectToAction("Index", "MyCtrl2", new {Id = <currId>});

return RedirectToAction("Index", "MyCtrl", new {id= <currId>});

答案 2 :(得分:0)

从默认路线中取出默认操作。这将强制始终在创建的URL中指定它:

routes.MapRoute(name: "MyRoute",
            url: "Flow",
            defaults: new { controller = "MyCtrl1", action = "Index" });

routes.MapRoute(name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "MyCtrl2", id = UrlParameter.Optional });