0

Ниже мой RouteConfig.cs фрагмент кода:RedirectToRoute перенаправляет к текущему действию, а не перенаправлять на маршрут, указанный routename

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 я перенаправлять на маршрут под названием «MyRoute», которая сопоставлена Home/About. Вместо перенаправления на Home/About он перенаправляется на одно действие (Home/Contact). Ниже мой HomeController код:

public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 

    public ActionResult Contact() 
    { 
     return RedirectToRoute("myroute"); 
    } 

Почему редирект myroute не работает?

Любая помощь будет оценена по достоинству. Спасибо.

+0

Вы не указали имя действия, поэтому оно использует значения из текущего запроса - вам нужно вернуть RedirectToRoute ("myroute", new {action = "About"}); 'или указать маршрут, если вы хотите, чтобы он перешел в 'About' –

ответ

0

Вы могли бы сделать это проще. Используйте Response.Redirect («Главная/О программе») Но я не знаю, есть ли другие требования.

1

При использовании RedirectToRoute, Html.RouteLink, Url.RouteUrl и связанных методах, которые позволяют указать маршрут по имени, название действует как дополнительный фильтр. В основном это означает, что маршрут может соответствовать маршруту, указанному "myroute", но вам все равно необходимо предоставить controller, action и любые другие требуемые значения маршрута, чтобы соответствовать этому маршруту.

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

Обратите внимание, что ответ @StephenMuecke «s предусмотрено в комментарии также будет работать, но только от контроллера Home. MVC автоматически повторно использует значения из текущего запроса при создании URL-адресов, если они явно не указаны.

С другой стороны, эта конфигурация маршрутизации принципиально нарушена, поскольку у вас есть 2 маршрута, которые принимают длины от 0, 1, 2 и 3 сегментов маршрута. В принципе, хотя можно создать URL-адрес с myroute, ни один входящий маршрут не может соответствовать myroute, потому что Default настроен на его переопределение. Вероятно, это приведет к проблемам, потому что маршрут, который вы выбрали , предназначен для, для этого пути никогда не совпадают, что будет затруднять, когда вы добавляете больше маршрутов.

См. Why map special routes first before common routes in asp.net mvc? за специфику этой проблемы и возможные решения.