앞에 적혀 있습니다
IHttpModule의 관련 내용에 대해서도 면접에서 질문을 받았는데, 이 인터페이스에 Init 메서드가 있어 구현 클래스에서 Init 메서드로 일련의 이벤트를 등록할 수 있는 것 같다는 느낌이 들었습니다. 이번 주말 집에서는 이 지식의 빈틈을 확인하고 채우는 것조차도 할 일이 거의 없습니다.
IHttp모듈 작동
asp.net 라이프사이클에 익숙한 친구들은 HttpModule 실행이 HttpHandler 이전에 실행되며, HttpModule 일련의 이벤트를 실행한 후, HttpHandler를 실행한 후 HttpModule의 일부 이벤트를 실행한다는 것을 알고 있을 것입니다. 자세한 내용은 다음 생애주기 다이어그램을 참고하시기 바랍니다.
HttpHandler는 http 요청을 처리하는 곳이고, HttpModule은 HTTP 요청의 "유일한 방법"입니다. 따라서 HTTP 요청이 실제 요청 처리 센터(HttpHandler)로 전달되기 전에 필요한 정보를 추가하거나, 가로챈 HTTP 요청 정보를 추가로 처리할 수 있습니다. 또는 경우에 따라 특정 조건을 충족하는 HTTP 요청을 단순히 종료하여 필터 역할을 할 수도 있습니다.
HTTP 요청은 HttpModule 컨테이너를 전달하는 어느 시점(ResolveRequestCache 이벤트)에 전달됩니다. 이 이벤트 이후, HttpModule 컨테이너는 HttpHandler의 인그레스 인스턴스를 생성하지만, HTTP 요청 제어권을 포기하는 대신 AcquireRequestState와 PreRequestHandlerExcute 이벤트를 계속 실행합니다. PreRequestHandlerExcute 이벤트 이후, HttpModule 창은 일시적으로 실제 HTTP 요청 처리를 위한 HttpHandler 컨테이너에 제어 권한을 부여합니다.
HttpHandler 컨테이너 내에서는 ProcessRequest 메서드가 HTTP 요청을 처리하기 위해 실행됩니다. 컨테이너 HttpHandler가 전체 HTTP 요청을 처리한 후, 제어권을 HttpModule에 반환하고, HttpModule은 처리된 HTTP 요청 정보 흐름을 층별로 계속 전달하여 클라이언트로 반환합니다.
한 가지 사례
프로젝트 구조
MyHttpModule 코드
web.config에 커스텀 HttpModule 등록하세요
페이지 Default.aspx 둘러보기
그렇다면 생애 주기에서 일련의 사건들이 실행되는 순서는 무엇일까요?
결과를 둘러보기
HttpModule 사용으로 Http 요청을 종료하세요
결과
요약
여기서는 asp.net 라이프사이클에서 가장 중요한 인터페이스인 IHttpModule을 소개하는데, 이는 이벤트 인터페이스로 설명할 수 있습니다. 구현 클래스의 Init 메서드에서는 라이프사이클 내 다양한 이벤트를 등록할 수 있고, 이벤트에서 다양한 로직을 정의할 수 있기 때문입니다.
|