Вот необходимый код для воспроизведения очень странной проблемы с маршрутизацией ASP.NET MVC 3.0:
Регистрация маршрута в Global.asax.cs:
routes.MapRoute("History", "Customer/History", new {controller = "User", action = "History", someParam = UrlParameter.Optional});
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Здесь мы объявляем маршрут к истории пользователя. Но в URL мы хотим «Клиент» вместо «Пользователь». Также обратите внимание на параметр someParam
. Контроллер User
действительно существует и имеет действие History
.
Теперь используется вид:
<a href="<%= Url.Action("History", "User") %>">History</a>
<a href="<%= Url.Action("History", "User", new { someParam="qqq" }) %>">History with param</a>
Я использую здесь Url.Action()
вместо Html.ActionLink()
только для ясности.
И вот результат - как эта часть представления была отображена:
<a href="/Customer/History">History</a>
<a href="/User/History?someParam=qqq">History with param</a>
Теперь проблема ясна - URL без параметров был разрешен правильно, а URL с параметром начинается с "/ User" вместо "/Customer".
Вопросы:
- Это нормальное поведение? Если да, почему маршрутизация работает таким образом?
Есть ли обходной путь для этого? Я имею в виду, есть ли способ получить окончательный результат как:
<a href="/Customer/History">History</a>
<a href="/Customer/History?someParam=qqq">History with param</a>