Написано спереду
Щодо відповідного змісту 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 класу реалізації можна зареєструвати різні події життєвого циклу та визначити різні логіки в події.
|