HTTPModule Порядок выполнения событий?
Кто-нибудь знает сайт или страницу, или знает порядок выполнения событий класса HTTPApplication для выполнения события HTTPModule?
Я нашел документацию MSDN для всех событий, но она не показывает список шагов процесса, и я не смог найти один.
3 ответа
Может быть, это помогает
http://support.microsoft.com/kb/307985/en-us/
Класс HttpApplication предоставляет ряд событий, с которыми модули могут синхронизироваться. Следующие события доступны для синхронизации модулей с каждым запросом. Эти события перечислены в последовательном порядке:
- BeginRequest
- AuthenticateRequest
- AuthorizeRequest
- ResolveRequestCache
- AcquireRequestState
- PreRequestHandlerExecute
- PostRequestHandlerExecute
- ReleaseRequestState
- UpdateRequestCache
- EndRequest
Следующие события доступны для модулей для синхронизации для каждой передачи запроса. Порядок этих событий недетерминирован.
- PreSendRequestHeaders
- PreSendRequestContent
- ошибка
Смотрите статью для полной информации.
Документация библиотеки MSDN:
- Обзор жизненного цикла приложений ASP.NET для IIS 5.0 и 6.0
- Обзор жизненного цикла приложений ASP.NET для IIS 7.0
Вот события (выделены жирным шрифтом) и другие шаги в конвейере запросов для ASP.NET 4.0:
- Проверьте запрос, который проверяет информацию, отправленную браузером, и определяет, содержит ли она потенциально вредоносную разметку.
- Выполните сопоставление URL-адресов, если в разделе UrlMappingsSection файла Web.config были настроены какие-либо URL-адреса.
- Вызовите событие BeginRequest.
- Вызовите событие AuthenticateRequest.
- Вызовите событие PostAuthenticateRequest.
- Вызовите событие AuthorizeRequest.
- Вызовите событие PostAuthorizeRequest.
- Вызовите событие ResolveRequestCache.
- Вызовите событие PostResolveRequestCache.
- [IIS 5.0 / 6.0] На основе расширения имени файла запрошенного ресурса (сопоставленного в файле конфигурации приложения) выберите класс, который реализует IHttpHandler для обработки запроса. Если запрос относится к объекту (странице), производному от класса Page, и страница должна быть скомпилирована, ASP.NET компилирует страницу перед созданием ее экземпляра. [IIS 7.0] Вызовите событие MapRequestHandler. Соответствующий обработчик выбирается на основе расширения имени файла запрашиваемого ресурса. Обработчиком может быть модуль с собственным кодом, такой как IIS 7.0 StaticFileModule, или модуль управляемого кода, такой как класс PageHandlerFactory (который обрабатывает файлы.aspx).
- Вызовите событие PostMapRequestHandler.
- Вызовите событие AcquireRequestState.
- Вызовите событие PostAcquireRequestState.
- Вызовите событие PreRequestHandlerExecute.
- Вызвать метод ProcessRequest (или асинхронную версию IHttpAsyncHandler.BeginProcessRequest) соответствующего класса IHttpHandler для запроса. Например, если запрос относится к странице, текущий экземпляр страницы обрабатывает запрос.
- Вызовите событие PostRequestHandlerExecute.
- Вызовите событие ReleaseRequestState.
- Вызовите событие PostReleaseRequestState.
- Выполните фильтрацию ответов, если определено свойство Filter.
- Вызовите событие UpdateRequestCache.
- Вызовите событие PostUpdateRequestCache.
- [IIS 7.0] Вызовите событие LogRequest.
- [IIS 7.0] Вызовите событие PostLogRequest.
- Вызовите событие EndRequest.
- Вызовите событие PreSendRequestHeaders.
- Вызовите событие PreSendRequestContent.
Примечание. События MapRequestHandler, LogRequest и PostLogRequest поддерживаются только в том случае, если приложение работает в интегрированном режиме в IIS 7.0 и в.NET Framework 3.0 или более поздней версии.
BeginRequest
Запрос был начат. Если вам нужно что-то сделать в начале запроса (например, показывать рекламные баннеры вверху каждой страницы или какую-либо переменную инициализации).
AuthenticateRequest
Если вы хотите подключить свою собственную схему аутентификации (например, найдите пользователя в базе данных, чтобы подтвердить пароль или проверить информацию заголовка в HTTP-запросе).
AuthorizeRequest
Это событие используется для реализации механизмов авторизации (например, для хранения ваших списков контроля доступа (ACL) в базе данных, а не в файловой системе).
ResolveRequestCache
Это событие определяет, может ли страница обслуживаться из выходного кэша. Если вы хотите написать свой собственный модуль кэширования (например, создать кэш на основе файлов, а не кэш-память), то синхронизируйте это событие, чтобы определить, будет ли обслуживаться страница из кэша или будет сгенерирована новая страница.
AcquireRequestState
Состояние сеанса извлекается из хранилища состояний. Если вы хотите создать свой собственный модуль управления состоянием, синхронизируйте это событие, чтобы получить состояние сеанса из хранилища состояний.
PreRequestHandlerExecute
Это событие происходит до выполнения обработчика HTTP.
PostRequestHandlerExecute
Это событие происходит после выполнения обработчика HTTP.
ReleaseRequestState
Состояние сеанса сохраняется обратно в хранилище состояний. Если вы создаете пользовательский модуль состояния сеанса, вы должны сохранить свое состояние обратно в хранилище состояний.
UpdateRequestCache
Это событие записывает выходные данные обратно в кэш вывода.
EndRequest
Запрос был выполнен.
Принятый ответ устарел. Вот список событий в порядке их возникновения согласно документации:
BeginRequest
AuthenticateRequest
PostAuthenticateRequest
AuthorizeRequest
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
После события PostResolveRequestCache и до события PostMapRequestHandler создается обработчик события (который является страницей, соответствующей URL-адресу запроса). Когда сервер работает под управлением IIS 7.0 в интегрированном режиме и, по крайней мере, в.NET Framework версии 3.0, возникает событие MapRequestHandler. Когда сервер работает под управлением IIS 7.0 в классическом режиме или более ранней версии IIS, это событие не может быть обработано.
PostMapRequestHandler
AcquireRequestState
PostAcquireRequestState
PreRequestHandlerExecute
PostRequestHandlerExecute
ReleaseRequestState
PostReleaseRequestState
UpdateRequestCache
PostUpdateRequestCache
LogRequest
PostLogRequest
EndRequest
Хотите вызвать метод для кэширования в событии PreSendRequestContent httpmodule. Проблема в том, что в моем приложении добавлены веб-заголовок и нижний колонтитул в соответствии с требованиями клиентов, и я не могу кэшировать содержимое изображений, javascript и css. В настоящее время я использую метод ReleaseRequestState в httpmodule.