Почему не работает по умолчанию, используя HTML.ActionLink в этом случае?
-
26-09-2019 - |
Вопрос
У меня довольно осознанная проблема с маршрутизацией.
Возвращаясь к маршрутизации после того, как не о чем беспокоиться о конфигурации для него в течение года, я использую маршрут по умолчанию и игнорировать маршрут для ресурсов:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
// Route name
"{controller}/{action}/{id}",
// URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
});
у меня есть RulesController
с действием для Index
а также Lorem
и а Index.aspx
, Lorem.aspx
В представлениях> справочника справочника.
У меня есть ActionLink, нацеленный на правила / индекс на странице Maseeter:
<li><div><%: Html.ActionLink("linkText", "Index", "Rules")%></div></li>
Ссылка оказывается как http://localhost:12345/Rules/
И получаю 404.
Когда я печатаю Index
в URL-адрес приложение направляет его к действию.
Когда я изменяю действие маршрута по умолчанию из "Index"
к "Lorem"
, ссылка действия оказывается как http://localhost:12345/Rules/Index
Добавление Index
Поскольку он больше не находится на маршруте по умолчанию и маршруты приложений к действию индекса правильно.
я использовал Отладчик маршрутизации Фила Хака, но ввод URL http://localhost:12345/Rules/
вызывает 404, используя это тоже.
Я думаю, что я охватил все ошибки новинок, соответствующие настолько вопросы и базовые RTFMS.
Я предполагаю, что «правила» не какое-либо зарезервированное слово в маршрутизации. Кроме обновления маршрутов и отстраивая их, что я могу посмотреть?
Решение
Убедитесь, что в одном каталоге нет папки, называемого «правилами». В своей конфигурации по умолчанию маршруты ASP.NET MVC уважают физические пути до определений маршрута. Если есть определенный маршрут, который соответствует пути к физической папке на сайте, двигатель маршрутизации будет полностью обойтись.
Вы можете отключить маршрутизацию на физические пути, изменив RouteTable.Routes.RouteExistingFiles
имущество false
, Но если вы это сделаете, и ваше приложение имеет пути к физическим ресурсам (например, изображения, скрипты, стилы, и т. Д.) Вам нужно будет приспособиться к тем путям с соответствующими определениями IGNOREROUTE (). Например: RouteTable.Routes.IgnoreRoute("content/{*pathInfo}");
.