На данный момент у меня есть атрибут runAllManagedModulesForAllRequests="true"
, поэтому мои модули работают для всех запросов. Я предполагаю, что это включает SessionStateModule
.SessionStateModule vs runAllManagedModulesForAllRequests = "true"
При попытке получить доступ к объекту сеанса в обработчик PostAcquireRequestState
событий в одном из моих собственных модулей, то HttpContext.Current.Session
равно нулю, когда HttpApplication.Context.CurrentHandler
равна нулю (например: для файла JS/CSS), и это не является нулевым, когда обработчик MvcHandler
(потому что это управляемый обработчик, я думаю).
Я смотрю на код SessionStateModule
в ILSpy, и я не мог найти, где принимает решение пропустить сеанс для этого запроса.
Я смотрел в %windir%\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
и нет никакого упоминания о SessionStateModule
, и в Web.config
в этой папке я нашел:
<add name="Session" type="System.Web.SessionState.SessionStateModule" />
Так что не использует никакого предусловия как managedHandler
.
Кто-нибудь знает, почему SessionStateModule
пропускает запросы для не управляемых ресурсов, даже если установлен атрибут runAllManagedModulesForAllRequests
?
Cheers.
По этой ссылке: http://www.iis.net/learn/get-started/introduction-to-iis/iis-modules-overview#Precondition, когда у вас есть runAllManagedModulesForAllRequests = истина, Precondition не имеет никакого эффекта , Такое поведение может отличаться в зависимости от режима конвейера (интегрированный OR classic). Вероятно, вы могли бы добавить, какой режим конвейера вы используете. – dotnetguy