Asp.Net Routing: как игнорировать множественные маршруты? - PullRequest
10 голосов
/ 27 августа 2008

Я бы хотел игнорировать несколько подстановочных маршрутов. С asp.net mvc preview 4 они поставляются с:

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

Я также хотел бы добавить что-то вроде:

RouteTable.Routes.IgnoreRoute("Content/{*pathInfo}");

но, похоже, это сломало некоторых помощников, которые генерируют URL в моей программе. Мысли?

Ответы [ 2 ]

13 голосов
/ 27 августа 2008

Здесь есть два возможных решения.

  1. Добавьте ограничение к маршруту игнорирования, чтобы убедиться, что только запросы, которые следует игнорировать, будут соответствовать этому маршруту. Вроде клудги, но должно работать.

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"});
    
  2. Что находится в вашем каталоге содержимого? По умолчанию маршрутизация не направляет файлы, которые существуют на диске (фактически проверяет VirtualPathProvider). Поэтому, если вы помещаете статический контент в каталог контента, вам может не понадобиться маршрут игнорирования.

5 голосов
/ 27 августа 2008

Это может быть довольно сложно.

При попытке выяснить, как сопоставить данные маршрута с маршрутом, система в настоящее время выполняет поиск сверху вниз, пока не найдет что-то, где предоставляется вся необходимая информация, а затем вставит все остальное в параметры запроса.

Поскольку необходимая информация для маршрута "Content / {* pathInfo}" всегда полностью удовлетворяется (на этом маршруте вообще не требуется никаких данных), и она находится в верхней части списка маршрутов, тогда все ваши попытки сопоставления с безымянные маршруты будут соответствовать этому шаблону, и все ваши URL будут основаны на этом ("Content? action = foo & controller = bar")

К сожалению, нет пути к этому с маршрутами действий. Если вы используете именованные маршруты (например, выбирая Html.RouteLink вместо Html.ActionLink), то вы можете указать имя маршрута для сопоставления. Это менее удобно, но более точно.

IMO, из-за сложных маршрутов система маршрутизации действий в основном падает. В приложениях, где у меня есть что-то отличное от маршрутов по умолчанию, я почти всегда в конечном итоге возвращаюсь к генерации URL на основе именованного маршрута, чтобы убедиться, что я всегда получаю правильный маршрут.

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