Игнорировать маршрутизацию встроенных ресурсов ASP.NET 4 веб-формы

#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 (/. )?» }); Это решило мою проблему.