Visual C# .NET을 사용하여 ASP.NET HTTP 모듈을 만드는 방법

이 문서의 Microsoft Visual Basic .NET 버전에 대한 내용은 308000 을 참조하십시오.



중요: 이 문서에서는 사용자가 다음 내용을 잘 알고 있는 것으로 가정합니다.
Visual C# 구문

문서 내용

이 문서에서는 Visual C# .NET을 사용하여 간단한 사용자 지정 HTTP 모듈을 만드는 방법을 단계별로 보여줍니다. 또한 모듈을 만들고 구축 및 구성하는 방법은 물론 Global.asax 파일에서 모듈의 이벤트를 연결하는 방법도 보여줍니다.

맨 위로

추가 정보

모듈 구현

  1. MyModule이라는 새 Visual Studio .NET C# 클래스 라이브러리 프로젝트를 만듭니다.
  2. 참조를 System.Web.dll 어셈블리로 설정합니다.
  3. 클래스에 다음 지시문을 추가합니다.
    using System.Web;
  4. SyncModule.cs 클래스의 이름을 바꾼 다음 새 이름을 반영하도록 클래스 정의를 변경합니다.
  5. IHttpModule 인터페이스를 구현합니다. 클래스 정의는 다음과 같이 나타나야 합니다.
    public class SyncModule : IHttpModule
  6. 어떤 이벤트를 등록할 것인지 결정합니다. 다음은 사용자가 등록할 수 있는 HttpApplication 개체에서 사용할 수 있는 이벤트에 대한 설명입니다.
    • AcquireRequestState: 모듈이 요청 상태(예: 세션)를 얻거나 만들 수 있도록 하려면 이 이벤트를 호출합니다.
    • AuthenticateRequest: 보안 모듈이 요청을 처리하기 전에 사용자를 인증해야 할 경우 이 이벤트를 호출합니다.
    • AuthorizeRequest: 보안 모듈이 요청을 인증해야 할 경우 이 이벤트를 호출합니다. 인증 후에 호출됩니다.
    • BeginRequest: 새로운 요청이 시작됨을 모듈에 알리려면 이 이벤트를 호출합니다.
    • Disposed: 어떤 이유로 응용 프로그램이 종료됨을 모듈에 알리려면 이 이벤트를 호출합니다. 모듈이 내부 정리를 수행할 수 있습니다.
    • EndRequest: 요청이 종료됨을 모듈에 알리려면 이 이벤트를 호출합니다.
    • Error: 요청을 처리하는 동안 발생한 오류를 모듈에 알리려면 이 이벤트를 호출합니다.
    • PostRequestHandlerExecute: 처리기가 요청 처리를 마쳤음을 모듈에 알리려면 이 이벤트를 호출합니다.
    • PreRequestHandlerExecute: 요청 처리기가 호출됨을 모듈에 알리려면 이 이벤트를 호출합니다.
    • PreSendRequestContent: 콘텐츠를 클라이언트에 보냄을 모듈에 알리려면 이 이벤트를 호출합니다.
    • PreSendRequestHeaders: HTTP 헤더를 클라이언트에 보냄을 모듈에 알리려면 이 이벤트를 호출합니다.
    • ReleaseRequestState: 처리기가 요청 처리를 마쳤기 때문에 모듈이 상태를 해제할 수 있도록 하려면 이 이벤트를 호출합니다.
    • ResolveRequestCache: 인증 후에 이 이벤트를 호출합니다. 캐싱 모듈은 캐시가 요청을 처리해야 하는지, 처리기가 요청을 처리해야 하는지 확인하기 위해 이 이벤트를 사용합니다.
    • UpdateRequestCache: 처리기에서 응답한 후에 이 이벤트를 호출합니다. 캐싱 모듈은 응답을 사용하여 캐시를 업데이트해야 합니다.
    이 예제에서는 BeginRequest 이벤트를 사용합니다.
  7. 다음과 같이 IHttpModule 인터페이스의 InitDispose 메서드를 구현합니다.
    public void Init(HttpApplication app)
    {
    app.BeginRequest += new EventHandler(OnBeginRequest);
    }

    public void Dispose(){ }
  8. 다음과 같이 이벤트 위임을 만듭니다.
    public delegate void MyEventHandler(Object s, EventArgs e);
  9. 다음과 같이 MyEventHandler 형식의 개인 로컬 변수를 정의하여 이벤트에 참조를 저장합니다.
    private MyEventHandler _eventHandler = null;
  10. 다음과 같이 HttpApplication 개체에서 상속하는 Global.asax 파일이나 클래스에 있는 메서드에 위임을 연결하는 이벤트를 만듭니다.
    public event MyEventHandler MyEvent
    {
    add { _eventHandler += value; }
    remove { _eventHandler -= value; }
    }
  11. 다음과 같이 HttpApplicationBeginRequest 이벤트에 연결하는 OnBeginRequest 메서드를 만듭니다.
    public void OnBeginRequest(Object s, EventArgs e)
    {
    HttpApplication app = s as HttpApplication;
    app.Context.Response.Write("Hello from OnBeginRequest in custom module.<br>");
    if(_eventHandler!=null)
    _eventHandler(this, null);
    }
  12. 프로젝트를 컴파일합니다.
맨 위로

모듈 구축

  1. C:\Inetpub\Wwwroot 아래에 Module이라는 디렉터리를 새로 만듭니다.
  2. 새로 만든 Module 디렉터리에 Bin이라는 하위 디렉터리를 만듭니다. 경로는 C:\Inetpub\Wwwroot\Module\Bin입니다.
  3. MyModule.dll을 프로젝트의 Bin\Debug 디렉터리에서 C:\Inetpub\Wwwroot\Module\Bin 디렉터리로 복사합니다.
  4. 다음 절차에 따라 새 Module 디렉터리를 웹 응용 프로그램으로 표시합니다.
    1. 인터넷 서비스 관리자를 엽니다.
    2. Module 디렉터리를 마우스 오른쪽 단추로 누른 다음 속성을 누릅니다.
    3. 디렉터리 탭에서 만들기를 누릅니다.
    4. 확인을 눌러 모듈 속성 대화 상자를 닫습니다.
맨 위로

시스템 구성

  1. C:\Inetpub\Wwwroot\Module\ 디렉터리에서 Web.config 파일을 새로 만듭니다.
  2. Web.config에 다음 텍스트를 붙여 넣습니다.
    <configuration>
    <system.web>
    <httpModules>
    <add name="MyModule" type="MyModule.SyncModule, MyModule" />
    </httpModules>
    </system.web>
    </configuration>
맨 위로

모듈 테스트

  1. C:\Inetpub\Wwwroot\Module 디렉터리에서 Test.aspx 파일을 새로 만듭니다.
  2. Test.aspx에 다음 텍스트를 붙여 넣습니다.
    <%@Page Language="C#"%>
    <% Response.Write("Hello from Test.aspx.<br>"); %>
  3. C:\Inetpub\Wwwroot\Module 디렉터리에서 Global.asax 파일을 만듭니다.
  4. Global.asax에 다음 코드를 붙여 넣습니다.
    <%@ Import Namespace="MyModule" %>

    <script language="C#" runat=server >
    protected void MyModule_OnMyEvent(Object src, EventArgs e)
    {
    Context.Response.Write("Hello from MyModule_OnMyEvent called in Global.asax.<br>");
    }
    </script>
  5. Test.aspx 페이지를 요청합니다. 다음 텍스트가 나타나야 합니다.
    Hello from OnBeginRequest in custom module.
    Hello from MyModule_OnMyEvent called in Global.asax.
    Hello from Test.aspx.
맨 위로

참조

HTTP 처리기에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.

307985 INFO: ASP.NET HTTP 모듈 및 HTTP 처리기 개요

맨 위로



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.
속성

문서 ID: 307996 - 마지막 검토: 2008. 7. 14. - 수정: 1

피드백