#asp.net #routing #webforms
#asp.net #маршруты #веб-формы
Вопрос:
Я использую маршрутизацию в asp.net 4 веб-формы. У меня есть тема dll, которая содержит все изображения, css и js файлы, необходимые для внешнего вида. У меня есть только 1 страница, которая динамически загружает элемент управления на странице. Я использую маршрутизацию для различения запроса. Определены следующие маршруты:
routes.Ignore("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Default-All-Pages", "Pages/{*OtherParams}", "~/Default.aspx", false);
Обработчик для управления встроенными ресурсами уже определен. Когда приложение выполняется, оно с помощью кода перенаправляет запрос на default.aspx. затем он загружает файл css и снова направляет запрос в default.aspx.
Я хочу, чтобы он перенаправлял запрос css / jpg в обработчик виртуального пути, а не на страницу. Какой маршрут я должен определить, чтобы запрос на файлы не обрабатывался по умолчанию.aspx-страница?
Ответ №1:
routes.Ignore("{*allaspx}", new { allaspx = @".*.aspx(/.*)?" });
routes.Ignore("{*allcss}", new { allcss = @".*.css(/.*)?" });
routes.Ignore("{*alljpg}", new { alljpg = @".*.jpg(/.*)?" });
routes.Ignore("{*alljs}", new { alljs = @".*.js(/.*)?" });
Это решило мою проблему.
Комментарии:
1. Это также устраняет проблему, когда у вас есть веб-методы в файлах .aspx и общий маршрут.
Ответ №2:
Точно так же, как вы игнорируете HttpHandlers, вы можете добавить правила игнорирования для файлов css и jpg:
routes.Ignore("{resource}.css/{*pathInfo}");
routes.Ignore("{resource}.jpg/{*pathInfo}");
Они будут исключены из таблицы маршрутов и будут обработаны любыми зарегистрированными обработчиками / модулями / фильтрами ISAPI.
Комментарии:
1. Вы также пробовали:
routes.Add(new System.Web.Routing.Route("{resource}.css/{*pathInfo}", new System.Web.Routing.StopRoutingHandler()));
?2. да, я сделал, похоже, не работает. На самом деле я перехватил запрос от global.asax begin request и всякий раз, когда есть запрос на webresources.axd, он не попадает в aspx init. когда поступает запрос на css-файл, он попадает в инициализацию aspx-страницы.
3. Извините, не хочу ставить на кон, но я предполагаю, что вы добавляете правила игнорирования перед маршрутом в обработчик содержимого aspx? Можете ли вы включить часть web.config, где вы регистрируете обработчик для css / изображений?
4. да, я думаю, я нашел решение, но на самом деле это не решает мою проблему. Просто отвечая на мой вопрос, получил ссылку от haacked.com/archive/2008/07/14 /…
5. маршруты. Игнорировать(«{ allaspx}», новый {allaspx = @».*.aspx(/. )?» }); маршруты. Игнорировать(«{ allcss}», новый {allcss = @».*.css(/. )?» }); маршруты. Игнорировать(«{ alljpg}», новый {alljpg = @».*.jpg(/. )?» }); маршруты. Игнорировать («{ alljs}», new {alljs = @».* .js (/. )?» }); Это решило мою проблему.