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

StackOverflow https://stackoverflow.com/questions/30302

Вопрос

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

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

Еще хотелось бы добавить что-то вроде:

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top