Кажется, что FormsAuthenticationModule обрабатывается первым. Этот модуль обычно раньше любого пользовательского модуля в конвейере ASP.NET, поэтому при запуске AuthenticateRequest сначала будет вызван FormsAuthenticationModule, выполнит свою работу, а затем будет вызван обработчик событий вашего модуля.
Если вы действительно хотите углубиться в это, я предлагаю попробовать отладить код ASP.NET самостоятельно. Вот пост, как настроить ваш VS:
http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx
РЕДАКТИРОВАТЬ : я смог подтвердить это поведение, настроив веб-проект с пользовательским модулем и обработчиками событий в Global.asax. Взгляните на исходный код HttpApplication.InitInternal, порядок инициализации следующий:
- инициализация встроенных модулей: FormsAuthenticationModule подключается к событию HttpApplication.AuthenticateRequest
- инициализация пользовательских модулей: пользовательский модуль подключается к событию HttpApplication.AuthenticateRequest
- инициализация класса Global (global.asax): здесь мы подключаемся к событию AuthenticateRequest
- HttpApplication.InitInternal ищет методы в классе Global, следуя указанному шаблону имени (например, Application_AuthenticateRequest), сопоставляет их с событием и подключает
После инициализации, когда запускается AuthenticateRequest, обработчики событий вызываются в том порядке, в котором они инициализированы, поэтому:
- Обработчик событий FormsAuthenticationModule.AuthenticateRequest
- Обработчик события CustomModule.AuthenticateRequest
- Обработчик событий Global.AuthenticateRequest
- Global.Application_AuthenticateRequest метод
Если я что-то пропустил, не существует механизма для остановки обработчиков событий, поэтому независимо от результата FormsAuthenticationModule.AuthenticateRequest все равно будут вызываться следующие обработчики. Надеюсь, это поможет.