Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC中的RedirectToRoute未使用默认路由重定向_C#_Asp.net Mvc 4_Redirect - Fatal编程技术网

C# MVC中的RedirectToRoute未使用默认路由重定向

C# MVC中的RedirectToRoute未使用默认路由重定向,c#,asp.net-mvc-4,redirect,C#,Asp.net Mvc 4,Redirect,当我尝试使用RedirectToRoute重定向时,它对特定情况下的默认路由不起作用。根据RouteConfig.cs,无论何时识别包含美食的url,都优先考虑美食。我想在访问控制器时在特定场景中使用默认路由。它应该重定向到控制器中的重定向操作。可能吗 代码片段: RouteConfig.cs public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}

当我尝试使用RedirectToRoute重定向时,它对特定情况下的默认路由不起作用。根据RouteConfig.cs,无论何时识别包含美食的url,都优先考虑美食。我想在访问控制器时在特定场景中使用默认路由。它应该重定向到控制器中的重定向操作。可能吗

代码片段:

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 }
        );
    }
烹饪控制器

 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");
    }
}

正确生成重定向您遇到的问题是: 匹配规则和:

 routes.MapRoute(
            "Cuisine", 
            "cuisine/{name}",
            new { controller = "Cuisine", action = "Search", name = UrlParameter.Optional });
是路由表中的第一个,因此它是使用的。 您只需在一个路由配置之前添加重定向的附加路由配置即可解决此问题:


这样,将首先匹配并执行重定向路由。

请尝试以下代码,而不是您的代码

在RedirectRoute中,您还可以使用以下代码重定向

首先给出操作名称,然后给出控制器名称。 请在粗体区域深入查看

 public class CuisineController : Controller
{
    public ActionResult Search(string name)
   {
      return RedirectToRoute(**"Redirect", "Cuisine"**);
   }

   public ActionResult Redirect()
   {
      return Content("Restaurant Closed");
   }
}

谢谢你的快速回复。您添加的MapRoute完全是硬编码的。如果有一个名为RedirectX的附加操作,它将不起作用。是否有任何方法可以强制默认路由?是的,但这需要您更改重定向url。您不能使用,因为这将与您的烹饪路线相匹配,您可以使用或任何具有附加路线参数的内容,并使用属性路线来容纳附加参数。或者干脆改变你的“烹饪”路线,指向这个方向,当然,如果你可以的话,你会完全摆脱这个问题
 public class CuisineController : Controller
{
    public ActionResult Search(string name)
   {
      return RedirectToRoute(**"Redirect", "Cuisine"**);
   }

   public ActionResult Redirect()
   {
      return Content("Restaurant Closed");
   }
}