Исключить запуск HttpModule для статического содержимого в IIS7 - PullRequest
6 голосов
/ 21 июля 2009

У меня проблема с моим HttpModule для аутентификации. Проблема в том, что он, очевидно, выполняется для каждого отдельного запроса, который я получаю на своем веб-сервере (IIS7). Поскольку он также использует переменную Session, он не работает должным образом на CSS, JS-файлах и т. П.

Я пытался использовать:

<add name="AuthModuleName" type="..." preCondition="managedHandler" />

но безрезультатно. Он по-прежнему выполняется при каждом запросе независимо от его расширения или типа MIME. Я должен также добавить, есть настройка

<modules runAllManagedModulesForAllRequests="true">

, что мне показалось подозрительным и фактически отключило предварительные условия для модулей. Но если изменить его на false, приложение будет сломано совершенно другим способом и с другим исключением (SessionStateTempDataProvider требует, чтобы SessionState был включен).

Кто-нибудь может мне помочь, как заставить IIS7 исключить мой HttpModule при запросах файлов статического содержимого?

Ответы [ 2 ]

3 голосов
/ 09 сентября 2009

runAllManagedModulesForAllRequests атрибут имеет , который должен быть установлен на false , чтобы фактически настроить любой модуль так, как вы хотите. При необходимости вам также потребуется правильно перенастроить Session и другие, но главное - это порядок выполнения конвейера обработчиков, который обрабатывает запросы.

Ответ был предоставлен в одном из моих других вопросов :

Благодаря Питеру, который предоставил ответ, который работал правильно.

1 голос
/ 21 июля 2009

Я не знаю о настройке IIS7 для этого, но вы можете сделать это.

Объект сеанса будет доступен только для нестатического содержимого:

void yourEventHandler(object sender, EventArgs e) {
    HttpApplication app = (HttpApplication)sender;
    if (app.Context.Session == null) {
        return;
    }
    // then your code here...
}

Это будетубедитесь, что ваш код не будет запущен для таких файлов, как CSS, JS и т. д. Но имейте в виду, что объект сеанса также не будет готов до события PostAcquireRequestState .(Порядок событий HttpApplication см. на этой странице .)

Редактировать: Кроме того, он появляется в ASP.NET Development Server(хотя я знаю, что вы сказали IIS7 в своем вопросе), ваш HttpModule все равно будет работать даже для статических файлов.

...