当我尝试使用RedirectToRoute()重定向时,它不适用于特定情况的默认路由。根据RouteConfig.cs,只要它识别出带有美食的网址,就会优先考虑烹饪。我想在访问美食控制器时在特定场景中使用默认路由。它应该重定向到菜单控制器中的重定向操作。可能吗?。
代码段:
RouteConfig.cs
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Cuisine",
"cuisine/{name}",
new { controller = "Cuisine", action = "Search", name = UrlParameter.Optional });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
CuisineController.cs
public class CuisineController : Controller
{
// GET: Cuisine
public ActionResult Search(string name)
{
return RedirectToRoute("Default", new { controller = "Cuisine", action = "Redirect" });
}
public ActionResult Redirect()
{
return Content("Restaurant Closed");
}
}
答案 0 :(得分:0)
正确生成重定向您遇到的问题是: http://app.com/cuisine/redirect 匹配规则和:
routes.MapRoute(
"Cuisine",
"cuisine/{name}",
new { controller = "Cuisine", action = "Search", name = UrlParameter.Optional });
是路线表中的第一个,所以它是使用的那个。
您可以通过在Cuisine
之前添加其他路由配置进行重定向来简单地修复它:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Cuisine-redirect",
"cuisine/redirect",
new { controller = "Cuisine", action = "Redirect"});
routes.MapRoute(
"Cuisine",
"cuisine/{name}",
new { controller = "Cuisine", action = "Search", name = UrlParameter.Optional });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这种Cuisine-redirect
路由将首先匹配并执行。
答案 1 :(得分:0)
请尝试以下代码而不是代码
在RedirectRoute中,您还可以使用以下代码重定向
通过首先给出动作名称,然后给出控制器名称。 请大胆地看一下。
public class CuisineController : Controller
{
public ActionResult Search(string name)
{
return RedirectToRoute(**"Redirect", "Cuisine"**);
}
public ActionResult Redirect()
{
return Content("Restaurant Closed");
}
}