Написано спереди
Что касается соответствующего содержания IHttpModule, меня также спросили во время собеседования, и я смутно почувствовал, что этот интерфейс имеет метод Init, который может регистрировать серию событий с методом Init в классе реализации. Дома в эти выходные действительно нечем заняться, даже если это проверка и заполнение пробелов в этом знании.
IHttpModule работает
Друзья, знакомые с asp.net жизненным циклом, должны знать, что выполнение HttpModule выполняется до HttpHandler, а затем после серии событий HttpModule, затем HttpHandler, а затем некоторых событий HttpModule. Для подробностей ознакомьтесь с следующей схемой жизненного цикла.
HttpHandler — это место для обработки http-запроса, HttpModule — «единственный способ» для HTTP-запроса, поэтому вы можете добавить необходимую информацию поверх HTTP-запроса до передачи этого HTTP-запроса в реальный центр обработки запросов (HttpHandler), либо выполнить дополнительную работу с перехваченной информацией HTTP-запроса. Или в некоторых случаях просто завершать HTTP-запросы, соответствующие определённым условиям, которые могут служить фильтром.
HTTP-запрос будет передан контейнеру HttpHandler в какой-то момент (событие ResolveRequestCache) во время доставки контейнера HttpModule. После этого события контейнер HttpModule создаёт входящий экземпляр HttpHandler, но вместо того чтобы отказаться от контроля над HTTP-запросом, он продолжает запускать события AcquireRequestState и PreRequestHandlerExcute. После события PreRequestHandlerExcute окно HttpModule временно передаёт управление контейнеру HttpHandler для обработки реальных HTTP-запросов.
Внутри контейнера HttpHandler выполняется метод ProcessRequest для обработки HTTP-запросов. После того как контейнер HttpHandler обрабатывает весь HTTP-запрос, он возвращает управление HttpModule, который продолжает передавать обработанный HTTP-запрос постепенно до возвращения клиенту.
Пример
Структура проекта
Код MyHttpModule
Зарегистрируйте пользовательский HttpModule в web.config
Просмотр страницы Default.aspx
Так каков порядок выполнения серии событий в жизненном цикле?
Просмотр результатов
Используйте HttpModule для завершения HTTP-запроса
результат
сводка
Здесь мы представляем самый важный интерфейс в жизненном цикле asp.net — IHttpModule, который можно описать как интерфейс событий, поскольку в методе Init в классе реализации можно регистрировать различные события жизненного цикла и определять различные логические элементы в событии.
|