Проблема с маршрутами MVC
-
13-09-2019 - |
Вопрос
Я прочитал много постов и не вижу своей ставки.
Может кто-нибудь помочь мне, пожалуйста.
Вот мой global.asax
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute("UserName", "Account/{action}/{username}",
new { action = "EditProfile", controller = "Account" });
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
Когда я использую
<%= Html.ActionLink("Edit Account", "EditProfile", "Account", new { username = Html.Encode(Page.User.Identity.Name) },null) %>
Я получил этот URL
http://localhost:8458/Account/EditProfile?username=cboivin
если я попытаюсь вызвать URL напрямую, напримерhttp://localhost:8458/Account/EditProfile/cboivin
не работать, чтобы...
В моем AccountController есть мой метод
public ActionResult EditProfile(string username)
{
return View(ServiceFactory.UserAccount.GetUserByUserName(new GetUserByUserNameArgs(username)));
}
Я не знаю, где моя ошибка.Может ли кто-нибудь мне помочь?Спасибо.
Решение
Маршруты читаются сверху вниз, ваш общий маршрут «охватить все» должен быть последним.
routes.MapRoute("UserName", "Account/{action}/{username}",
new { action = "EditProfile", controller = "Account" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Другие советы
Попробуйте удалить:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
И помните, что более общие маршруты должны находиться внизу таблицы маршрутизации, а более конкретные маршруты должны располагаться вверху.
Не связан с StackOverflow