2010-02-02 2 views
0

У меня есть HttpModule, который подключается к событию EndRequest на IIS6 с зарегистрированным обработчиком подстановок, и он отлично работает, пока запрос заканчивается на странице .aspx, но НЕ, если url отсутствует (404).EndRequest не запускается при IIS, когда ресурс отсутствует

Я думаю, это из-за того, что staticfilehandler заканчивает запрос, но есть ли хорошее решение для этой проблемы?

Я пробовал такое же решение в IIS7 (режим конвейера), и там он отлично работает.

ответ

0

Первое, что я попробую, это сообщить IIS не проверять, существует ли файл, который позволит передать запрос в HttpModule. Вы можете сделать это для любого конкретного сопоставления файлов, включая шаблон.

Если приведенный выше вариант не относится к худшему случаю, вы можете добавить обработчик по умолчанию для ошибки 404 в файле web.config, так что если HttpModule не сможет поймать событие, у вас все еще есть шанс 'сделай что-нибудь'. В зависимости от того, что вы пытаетесь выполнить в событии EndRequest, вы все равно сможете использовать обходной путь.

<customErrors defaultRedirect="ErrorPage.aspx" mode="On"> 
    <error statusCode="404" redirect="filenotfound.aspx" /> 
</customErrors> 
+0

Как я писал в вопросе, подстановочный знак определен, но не имеет никакого значения, EndRequest все еще не срабатывает. Пользовательские ошибки не являются решением этой проблемы, поскольку она выполняет перенаправление, а не переписывает. – bang

+0

Вы попытались снять флажок «проверить файл существует» в администраторе IIS? Это было более важное предложение? –

+0

Да, инициируется BeginRequest (= aspx isapi), но если обработчики не назначены, запрос будет перенаправлен на staticfilehandler, в результате чего EndRequest НЕ запускается. Это поведение в IIS6. В IIS7 результат будет таким, как ожидалось (запускаются как BeginRequest, так и EndRequest). – bang

Смежные вопросы