Проблема с маршрутами Default и catchall - PullRequest
0 голосов
/ 29 апреля 2009

Я определяю много явных маршрутов. Один из них:

routes.MapRoute("default", "",
  new { controller = "Home", action = "Index" });

В конце я определяю универсальный маршрут:

routes.MapRoute("PageNotFound", "{*url}",
  new { controller = "Error", action = "Http404" });

Если я перехожу на домашнюю страницу http://localhost,, то отображается страница http404. И как ни странно, если я удаляю универсальный маршрут, то страница приветствия отображается правильно. Также обратите внимание, что у меня есть меню, где я вызываю Url.RouteUrl («по умолчанию»), и ссылка на домашнюю страницу генерируется правильно.

Итак, почему мой маршрут по умолчанию не активирован, когда существует универсальный маршрут?

Обновление : я использую route.RouteExistingFiles = true. Если я удаляю его, то он работает как положено. Но мне нужно, чтобы оно было установлено на истину. В чем здесь проблема?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 14 июля 2009

Если у вас все еще есть маршрут по умолчанию (IE {controller} / {action} / {id}) в RegisterRoutes (), он будет перехватывать все URL, которые соответствуют формату обычный запрос MVC.

Другими словами, универсальный маршрут может перехватывать неверный URL, только если он не соответствует нормальному формату ( бла / бла / бла / бла ).

В случае несуществующего контроллера исключение должно обрабатываться с помощью обычной обработки ASP.NET.

Вот хорошее описание обработки здесь

0 голосов
/ 12 января 2011

Вы пытались наложить ограничение на поймать весь маршрут? Ограничение должно указывать, что сегмент общего охвата не должен содержать 0 символов.

0 голосов
/ 30 апреля 2009

Если вы используете «rout.RouteExistingFiles = true», это означает, что он будет маршрутизировать существующие (физически существующие) файлы как свои собственные - поэтому для них маршрутизация будет пропущена. Я думаю, что на вашем корневом сайте, вероятно, есть "default.aspx" или "index.htm" или что-то в этом роде.

После включения RouteExistingFiles эти файлы будут выполняться нормально (а не через маршрутизацию).

Теперь я думаю, что ваша маршрутизация на перехватах переопределяет вас RouteExistingFiles, поэтому он автоматически направляет default.aspx в ваш перехват 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...