Подтвердить что ты не робот

Маршрутизация Asp.Net: как игнорировать несколько шаблонов подстановочных знаков?

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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