HttpModule 이해 및 사용자 정의

10057 단어 Module
전언
전편HttpHandler 이해 및 사용자 정의에 이어 HttpModule의 진일보한 학습이 진행되었는데 이 편은 하나의 소결로 삼았다.
주요 참조: Asp.Net 프레임(HttpModule 설명) - Part.3
카탈로그
1. 도대체 HttpModule은 무엇입니까?
2. 시스템 내 HttpModule
3. HttpModule 구성
4. HttpModule 사용자 정의
5. Global.asax 파일과 HttpModule.
 
도대체 HttpModule이 뭐예요?
  Asp.net의 이벤트는 응용 프로그램, 페이지, 컨트롤 세 단계로 나뉜다.HttpModule은 파이프 모델에서 Asp.net의 프로그램 레벨 이벤트를 구독하고 프로그램 레벨 이벤트가 터치될 때 HttpModule에 대응하는 처리 방법을 호출합니다.그러니까 HttpModule은 Asp를 구독하는 거예요.net 응용 프로그램 수준의 이벤트 포털 - HttpApplication 객체의 라이프 사이클에 첨부된 이벤트입니다.
 
시스템 내 HttpModule
  Asp.net 내부의 많은 기능들은 HttpModule 형식으로 실행된다. 예를 들어 Windows,Forms와PassPort 인증,Session 메커니즘 등이다.다음은 내부 HttpModule 및 해당 역할의 일부입니다.
이름:
타입
기능
OutputCache
System.Web.Caching.OutputCacheModule
페이지 레벨 출력 캐시
Session
System.Web.SessionState.SessionStateModule
Session 상태 관리
WindowsAuthentication
System.Web.Security.WindowsAuthenticationModule
통합 Windows 인증을 통한 클라이언트 인증
FormsAuthentication
System.Web.Security.FormsAuthenticationModule
쿠키 기반 창 인증을 사용하여 클라이언트 인증
PassportAuthentication
System.Web.Security.PassportAuthenticationModule
MS 여권으로 고객 인증
RoleManager
System.Web.Security.RoleManagerModule
현재 사용자 역할 관리
UrlAuthorization
System.Web.Security.UrlAuthorizationModule
사용자가 URL에 액세스할 수 있는지 여부를 판단합니다.
FileAuthorization
System.Web.Security.FileAuthorizationModule
사용자가 어떤 자원에 접근할 수 있는 권한을 부여받았는지 판단
AnonymousIdentification
System.Web.Security.AnonymousIdentificationModule
관리 Asp.Net 애플리케이션의 익명 액세스
Profile
System.Web.Profile.ProfileModule
사용자 파일 파일의 창설 및 관련 사건 관리
ErrorHandlerModule
System.Web.Mobile.ErrorHandlerModule
이상 포착, 오류 알림 문자 포맷, 클라이언트 프로그램에 전달
 
HttpModule 구성
사용자 정의 HttpModule은 사용자 정의 HttpHandler와 비슷하며 모두 웹에 있습니다.config 파일에서 구성합니다.형식은 다음과 같습니다.
1 <HttpModules>
2 <add name="MM" type="MyModule,MMAssembly"/>
3 </HttpModules>

1. type: HttpHandler와 같이 두 부분으로 구성되어 있는데 첫 번째 부분은 완전한 클래스 이름(명명 공간 이름 포함)이고 두 번째 부분은 프로그램 집합 이름(.dll 포함하지 않음)이다.
2.name: HttpModule의 이름은 클래스 이름과 무관할 수 있습니다.HttpApplication 대상의 Modules 속성을 통해 HttpModule Collection을 가져오고name를 통해 대응하는 HttpModule 대상을 가져옵니다.글로벌에서.asax에서 메서드 이름 ModuleNameEventName에서 HttpModule의 이벤트를 구독합니다. 여기는 MM 입니다.구체적인 사건명은 아래의 실례를 보십시오.
3. 작업 프로세스에 들어오는 모든 요청은 설정된 HttpModule 처리를 거치기 때문에 (HttpModule는 구독 프로그램급 이벤트이기 때문에) 설정 파일에 path와verb 속성이 없습니다(*.aspx든 *.ashx든 요청 방식은 get이든post이든 모두 처리됩니다).
참고: HttpModule 구성은 HttpHandler처럼 IIS에서 구성할 필요가 없습니다.
 
HttpModule 사용자 정의
각 HttpModule은 System을 상속합니다.Web.IHttpModule 인터페이스를 사용하고 인터페이스의 Init(HttpApplication context) 및 Dispose() 방법을 사용합니다.다음과 같습니다.
 1 public class MyModule:IHttpModule
2 {
3
4 public void Init(HttpApplication context)
5 {
6 context.BeginRequest += new EventHandler(context_BeginRequest);
7 }
8
9 void context_BeginRequest(object sender, EventArgs e)
10 {
11 HttpContext.Current.Response.Write("BeginRequest");
12 }
13
14 public void Dispose()
15 {
16 }
17 }

init (): 이 방법은 HttpApplication 대상을 받아들입니다. HttpApplication은 현재 응용 프로그램을 대표합니다. 이 방법에서 HttpApplication 대상이 클라이언트에 노출된 이벤트를 구독해야 합니다.이를 통해 알 수 있듯이 이 방법은 이벤트에 대한 구독에만 사용되고 실제 이벤트 처리 프로그램은 우리가 따로 쓰는 방법이 필요하다.
Dispose(): 쓰레기를 수거하기 전에 자원을 방출합니다.
전체 과정은 이해하기 쉽다.
  • 사이트의 첫 번째 자원이 방문되었을 때 Asp.Net은 HttpApplication 클래스의 실례를 만들 것입니다. 이것은 사이트 응용 프로그램을 대표하고 Web에 모든 것을 만들 것입니다.Config에 등록된 Module 인스턴스
  • Module 인스턴스를 만들 때 Module의 Init () 방법이 호출됩니다.
  • Init() 메서드에서 응답하려는 HttpApplication에 노출된 이벤트를 등록합니다.(방법의 간단한 등록만 하고 실제 방법은 따로 써야 한다).
  • HttpApplication은 응용 프로그램 주기에 각종 이벤트를 터치합니다.
  • 이벤트를 촉발할 때 모듈이 인트 () 방법에 등록된 방법을 호출합니다.

  • 의뢰에 대한 참고 사항: 위임 및 이벤트
     
    Global.asax 파일 및 HttpModule
    asp.net에서 Glabal은 응용 프로그램과Session 이벤트를 등록할 수 있을 뿐만 아니라 Http Module에 노출된 이벤트도 등록할 수 있다.시스템 모듈의 이벤트를 등록할 수 있을 뿐만 아니라 우리 뜻의 모듈이 드러난 이벤트도 등록할 수 있다.구체적으로 소개하기 전에 여기서 먼저 두 가지를 주의해야 한다.
  • Http 요청을 처리할 때마다 프로그램 이벤트가 한 번씩 터치되지만 ApplicationStart 및 ApplicationEnd는 예외적으로 첫 번째 리소스 파일에 액세스할 때만 트리거됩니다.
  • Http Module에서 Session 이벤트를 등록하고 응답할 수 없습니다.Start 및 SessionEnd, Glabal을 통해서만 가능합니다.asax로 처리합니다.

  • 다음 예제를 계속합니다.
    MyModule.cs 파일
     1 public class MyModule:IHttpModule
    2 {
    3 public event EventHandler ExposedEvent;//HttpModule , Global.asax
    4
    5 public void Init(HttpApplication context)
    6 {
    7 context.BeginRequest += new EventHandler(context_BeginRequest);// HttpApplication
    8 }
    9
    10 void context_BeginRequest(object sender, EventArgs e)
    11 {
    12 HttpContext.Current.Response.Write("BeginRequest");
    13 OnExposedEvent(new EventArgs());// HttpModule
    14 }
    15
    16 protected void OnExposedEvent(EventArgs e)
    17 {
    18 if (ExposedEvent != null)
    19 {
    20 ExposedEvent(this, e);
    21 }
    22 }
    23
    24 public void Dispose()
    25 {
    26 }
    27 }

    Global.asax 파일
    1 void MyModule_ExposedEvent(object sender, EventArgs e)
    2 {
    3 Response.Write("xixi");
    4 }

    위의 MyModuleExposed Event 메서드는 MyModule의 Exposed Event 이벤트를 자동으로 구독합니다.구체적인 실현 메커니즘은 연구해야 한다!

    좋은 웹페이지 즐겨찾기