#asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-routing
#asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-routing
Вопрос:
Как мне настроить ASP.NET Маршрутизация MVC 3, поэтому в URL-адресе не отображается контроллер?
Вот мои маршруты
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"HomeActions",
"{action}",
new { action= "AboutUs" }
);
Мне нужен url:
mysite.com/AboutUs
Но у меня есть
mysite.com/Home/AboutUs
Ответ №1:
Я был бы очень конкретен в отношении URL, который вы хотите маршрутизировать. И поместите его над маршрутом по умолчанию.
routes.MapRoute(
"HomeActions",
"AboutUs",
new { controller = "Home", action= "AboutUs" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Менее специфичный маршрут, подобный тому, который вы предложили, может иметь нежелательные последствия. Особенно, если указан ниже маршрута по умолчанию.
routes.MapRoute(
"HomeActions",
"{action}",
new { controller = "Home", action= "AboutUs" }
);
Например, если указанный выше маршрут добавлен после значения по умолчанию, то URLhttp://www.example.com/AboutUs скорее всего, будет соответствовать маршруту {controller = «AboutUs», action = «Index», id = UrlParamter.Необязательно}. Если вы добавили маршрут выше маршрута по умолчанию, то поиск URLhttp://www.example.com/Users которое вы, возможно, захотите сделать действием индекса на пользовательском контроллере, теперь будет искать действие пользователей на домашнем контроллере.
Итак, я бы посоветовал быть конкретным в отношении подобных маршрутов.
Комментарии:
1. «И поместите его выше маршрута по умолчанию» помогло, спасибо
Ответ №2:
Вам нужно добавить маршрут без {controller}
части и указать имя контроллера в параметре defaults.
Комментарии:
1. Не неправильный ответ, но мог бы быть более конкретным. Скрытие имени контроллера может иметь последствия.
2. Спасибо за ваш ответ, но это не сработает. Я пробую: маршруты. MapRoute( «HomeActions», «{действие}», новый {контроллер=»Home» } );
3. @Victoria: Вам нужно указать это перед другим маршрутом, иначе он никогда не будет достигнут (поскольку другой маршрут сначала соответствует URL-адресам)