以下是我的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
无效?
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
当您使用RedirectToRoute
,Html.RouteLink
,Url.RouteUrl
以及允许您按名称指定路线的相关方法时,该名称就像一个额外的过滤器。基本上,这意味着路径只能匹配名为"myroute"
的路由,但您仍需要提供controller
,action
以及任何其他所需的路由值为了匹配那条路线。
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”)但我不知道是否还有其他要求。