httphandler не включается для не домашних страниц - PullRequest
0 голосов
/ 02 марта 2010

У меня есть приложение MVC2 и библиотека HttpHandler. Библиотека, чтобы упростить, обслуживает изображение. Проблема в том, что, если я вызываю этот обработчик с корневой страницы (http://whatever/), все работает нормально. Однако, если я изменяю Global.asax, то теперь та же страница имеет адрес http://whatever/controller/action - он не работает (вместо изображения появляется текст ALT).

Я не писал библиотеку обработчиков, но у меня есть код; поэтому я поставил точку останова в функции ProcessRequest реализации IHttpHandler. Для ситуации хорошо точка останова срабатывает, но для случая плохо это не так. Итак, я предполагаю, что обработчик не вызывается для некорневых страниц.

Это то, что у меня есть в разделе system.webServer / handlers:

<add name="ImageHandler" verb="*" 
              path="ImageLib.axd" type="ImageHandler, ImageHandler" />

Страница просмотра имеет

<img src="ImageLib.axd?image=img001.jpg" alt="real image here" />

Я не знаю, играет ли MVC какую-либо роль в этом ... старое приложение WebForms прекрасно работает с теми же настройками.

Надеюсь, я предоставил все, что знаю. Конечно, если что-то не понятно, я с удовольствием объясню как можно больше!

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Вам необходимо направить запрос изображений в ваш httpHandler, но mvc is перехватывает запросы и пытается перенаправить действие контроллера.

Вы можете настроить это в своем Global.asax или если вы реализуете свое собственное HttpApplication в методе OnStart () следующим образом:

routes.IgnoreRoute("{*allaxd}", new {allaxd=@".*\.axd(/.*)?"});
// or make sure you have this 
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

Более подробную информацию о сообщении Фила Хаака вы можете найти здесь http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx

1 голос
/ 02 марта 2010

Попробуйте это:

<img src="/ImageLib.axd?image=img001.jpg" alt="real image here" />

Основная проблема заключается в том, что вы относительно ссылаетесь на ImageLib.axd. Браузер попытается получить к нему доступ откуда угодно ... в вашем случае, когда он запрашивает изображение, он запрашивает его у http://whatever/controller/action/ImageLib.axd. Я предполагаю, что вам нужно запросить у http://whatever/ImageLib.axd.

Обратите внимание, что простое добавление предыдущего удара (/) не обязательно решит вашу проблему. Если ImageLib.axd находится в какой-то подпапке вне вашего корня, вы должны включить это. Если ваш обработчик ImageLib.axd находится в папке с именем handlers вне корня вашего веб-сайта, вы должны сделать следующее:

<img src="/Handlers/ImageLib.axd?image=img001.jpg" alt="real image here" />
...