HTTPModule Порядок выполнения событий?

Кто-нибудь знает сайт или страницу, или знает порядок выполнения событий класса HTTPApplication для выполнения события HTTPModule?

Я нашел документацию MSDN для всех событий, но она не показывает список шагов процесса, и я не смог найти один.

3 ответа

Решение

Может быть, это помогает

http://support.microsoft.com/kb/307985/en-us/

Класс HttpApplication предоставляет ряд событий, с которыми модули могут синхронизироваться. Следующие события доступны для синхронизации модулей с каждым запросом. Эти события перечислены в последовательном порядке:

  1. BeginRequest
  2. AuthenticateRequest
  3. AuthorizeRequest
  4. ResolveRequestCache
  5. AcquireRequestState
  6. PreRequestHandlerExecute
  7. PostRequestHandlerExecute
  8. ReleaseRequestState
  9. UpdateRequestCache
  10. EndRequest

Следующие события доступны для модулей для синхронизации для каждой передачи запроса. Порядок этих событий недетерминирован.

  • PreSendRequestHeaders
  • PreSendRequestContent
  • ошибка

Смотрите статью для полной информации.

Документация библиотеки MSDN:

Вот события (выделены жирным шрифтом) и другие шаги в конвейере запросов для ASP.NET 4.0:

  1. Проверьте запрос, который проверяет информацию, отправленную браузером, и определяет, содержит ли она потенциально вредоносную разметку.
  2. Выполните сопоставление URL-адресов, если в разделе UrlMappingsSection файла Web.config были настроены какие-либо URL-адреса.
  3. Вызовите событие BeginRequest.
  4. Вызовите событие AuthenticateRequest.
  5. Вызовите событие PostAuthenticateRequest.
  6. Вызовите событие AuthorizeRequest.
  7. Вызовите событие PostAuthorizeRequest.
  8. Вызовите событие ResolveRequestCache.
  9. Вызовите событие PostResolveRequestCache.
  10. [IIS 5.0 / 6.0] На основе расширения имени файла запрошенного ресурса (сопоставленного в файле конфигурации приложения) выберите класс, который реализует IHttpHandler для обработки запроса. Если запрос относится к объекту (странице), производному от класса Page, и страница должна быть скомпилирована, ASP.NET компилирует страницу перед созданием ее экземпляра. [IIS 7.0] Вызовите событие MapRequestHandler. Соответствующий обработчик выбирается на основе расширения имени файла запрашиваемого ресурса. Обработчиком может быть модуль с собственным кодом, такой как IIS 7.0 StaticFileModule, или модуль управляемого кода, такой как класс PageHandlerFactory (который обрабатывает файлы.aspx).
  11. Вызовите событие PostMapRequestHandler.
  12. Вызовите событие AcquireRequestState.
  13. Вызовите событие PostAcquireRequestState.
  14. Вызовите событие PreRequestHandlerExecute.
  15. Вызвать метод ProcessRequest (или асинхронную версию IHttpAsyncHandler.BeginProcessRequest) соответствующего класса IHttpHandler для запроса. Например, если запрос относится к странице, текущий экземпляр страницы обрабатывает запрос.
  16. Вызовите событие PostRequestHandlerExecute.
  17. Вызовите событие ReleaseRequestState.
  18. Вызовите событие PostReleaseRequestState.
  19. Выполните фильтрацию ответов, если определено свойство Filter.
  20. Вызовите событие UpdateRequestCache.
  21. Вызовите событие PostUpdateRequestCache.
  22. [IIS 7.0] Вызовите событие LogRequest.
  23. [IIS 7.0] Вызовите событие PostLogRequest.
  24. Вызовите событие EndRequest.
  25. Вызовите событие PreSendRequestHeaders.
  26. Вызовите событие 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

Запрос был выполнен.

Принятый ответ устарел. Вот список событий в порядке их возникновения согласно документации:

  1. BeginRequest

  2. AuthenticateRequest

  3. PostAuthenticateRequest

  4. AuthorizeRequest

  5. PostAuthorizeRequest

  6. ResolveRequestCache

  7. PostResolveRequestCache

    После события PostResolveRequestCache и до события PostMapRequestHandler создается обработчик события (который является страницей, соответствующей URL-адресу запроса). Когда сервер работает под управлением IIS 7.0 в интегрированном режиме и, по крайней мере, в.NET Framework версии 3.0, возникает событие MapRequestHandler. Когда сервер работает под управлением IIS 7.0 в классическом режиме или более ранней версии IIS, это событие не может быть обработано.

  8. PostMapRequestHandler

  9. AcquireRequestState

  10. PostAcquireRequestState

  11. PreRequestHandlerExecute

  12. PostRequestHandlerExecute

  13. ReleaseRequestState

  14. PostReleaseRequestState

  15. UpdateRequestCache

  16. PostUpdateRequestCache

  17. LogRequest

  18. PostLogRequest

  19. EndRequest

Хотите вызвать метод для кэширования в событии PreSendRequestContent httpmodule. Проблема в том, что в моем приложении добавлены веб-заголовок и нижний колонтитул в соответствии с требованиями клиентов, и я не могу кэшировать содержимое изображений, javascript и css. В настоящее время я использую метод ReleaseRequestState в httpmodule.

Другие вопросы по тегам