Маршрутизация Asp.Net:Как игнорировать несколько маршрутов с подстановочными знаками?
-
09-06-2019 - |
Вопрос
Я хотел бы игнорировать несколько маршрутов с подстановочными знаками.Предварительная версия asp.net mvc 4 поставляется с:
RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
Еще хотелось бы добавить что-то вроде:
RouteTable.Routes.IgnoreRoute("Content/{*pathInfo}");
но, похоже, это нарушает работу некоторых помощников, которые генерируют URL-адреса в моей программе.Мысли?
Решение
Здесь есть два возможных решения.
Добавьте ограничение к маршруту игнорирования, чтобы гарантировать, что этому маршруту будут соответствовать только те запросы, которые следует игнорировать.Как-то коряво, но должно сработать.
RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"});
Что находится в вашем каталоге контента?По умолчанию маршрутизация не маршрутизирует файлы, существующие на диске (фактически проверяет VirtualPathProvider).Поэтому, если вы помещаете статический контент в каталог Content, вам может не понадобиться маршрут игнорирования.
Другие советы
Это может быть довольно сложно.
Пытаясь выяснить, как сопоставить данные маршрута с маршрутом, система в настоящее время выполняет поиск сверху вниз, пока не находит что-то, где предоставляется вся необходимая информация, а затем подставляет все остальное в параметры запроса.
Поскольку необходимая информация для маршрута «Content/{*pathInfo}» всегда полностью удовлетворяется (в этом маршруте вообще нет необходимых данных) и находится в верхней части списка маршрутов, все ваши попытки сопоставить неназванные маршруты будут соответствует этому шаблону, и все ваши URL-адреса будут основаны на нем ("Content?action=foo&controller=bar")
К сожалению, с маршрутами действий обойти эту проблему невозможно.Если вы используете именованные маршруты (например, выбираете Html.RouteLink вместо Html.ActionLink), вы можете указать имя соответствующего маршрута.Это менее удобно, но более точно.
ИМХО, сложные маршруты приводят к сбою системы маршрутизации действий.В приложениях, где у меня есть что-то отличное от маршрутов по умолчанию, я почти всегда возвращаюсь к генерации URL-адресов на основе именованного маршрута, чтобы гарантировать, что я всегда получаю правильный маршрут.