[ASP.NET] - Http Handler 및 IHttpHandler 사용방법

728x90
반응형

 

 

ASP.NET HTTP Handler는 ASP.NET 웹 응용 프로그램에 대한 요청에 대한 응답으로 실행되는 프로세스 ( "종점"이라고도 함) 입니다. 가장 일반적인 처리기는 .aspx 파일을 처리하는 ASP.NET 페이지 Handler입니다. 

사용자가 .aspx 파일을 요청하면 페이지 처리기를 통해 페이지에서 요청이 처리됩니다. 사용자 지정 출력을 브라우저에 렌더링하는 고유 한 HTTP 처리기를 만들 수 있습니다.

 

일부 ASP.NET 기본 처리기는 다음과 같습니다.

  1. 페이지 처리기 (.aspx) – 웹 페이지 처리
  2. 사용자 제어 처리기 (.ascx) – 웹 사용자 제어 페이지를 처리합니다.
  3. 웹 서비스 처리기 (.asmx) – 웹 서비스 페이지를 처리합니다.
  4. 추적 처리기 (trace.axd) – 추적 기능을 처리합니다.

 

ASP.NET 요청 처리는 ASP.NET이 파이프 라인의 모든 모듈에 http 요청을 전달하는 파이프 라인 모델을 기반으로합니다. 각 모듈은 http 요청을 수신하고 이에 대한 모든 권한을 갖습니다. 모듈은 적합하다고 판단되는 방식으로 요청을 처리 할 수 ​​있습니다. 요청이 모든 HTTP 모듈을 통과하면 결국 HTTP 처리기에 의해 처리됩니다. HTTP 처리기는 일부 처리를 수행하고 결과는 파이프 라인의 HTTP 모듈을 다시 통과합니다.

 

다음 그림은이 흐름을 설명합니다.

 

 

 


HTTP Handler

HTTP Handler는 System.Web.IHttpHandler 인터페이스를 구현하는 .NET 구성 요소입니다. IHttpHandler 인터페이스를 구현하는 모든 클래스는 들어오는 HTTP 요청의 대상 역할을 할 수 있습니다. HTTP 처리기는 ISAPI 확장과 다소 유사합니다. HTTP 처리기와 ISAPI 확장의 한 가지 차이점은 ISAPI 확장과 유사하게 URL에서 파일 이름을 사용하여 HTTP 처리기를 직접 호출 할 수 있다는 것입니다.

 

HTTP 핸들러는 다음 메소드를 구현합니다.

방법 이름 기술
ProcessRequest 이 메소드는 실제로 모든 http 핸들러의 핵심입니다. 이 메소드는 http 요청을 처리하기 위해 호출됩니다.
IsReusable 이 속성은 동일한 유형의 다른 요청을 수행하기 위해이 http 핸들러 인스턴스를 재사용 할 수 있는지 여부를 판별하기 위해 호출됩니다. HTTP 핸들러는 재사용 가능 여부를 지정하기 위해 true 또는 false를 리턴 할 수 있습니다.

 

 

 


 


Sample

특정 요청이 들어왔을때, EndPoint 를 다르게 해주는 방식을 간략한 샘플로 제작하였습니다. 

asmx의 확장자를 사용하는 요청이 들어오면 CustomHandler를 호출하도록 파이프라인을 구축하였습니다.

namespace WebFormApp.Common
{
    public class CustomHandler : IHttpHandler
    {
        public bool IsReusable { get { return false; } }

        public void ProcessRequest(HttpContext context)
        {
            HttpResponse objResponse = context.Response;
            objResponse.Write("<html><body><h1>Don't Use asmx File");
            objResponse.Write("</body></html>");
        }
    }
}

 

 

Web.Config

system.webServer 영역에 해당 Handler를 호출해주며, asmx 파일일 경우에만 호출 하도록 설정하였습니다. 

<system.webServer>
  <handlers>
    <add name="CustomHandlers" path="*.asmx" verb="*" type="WebFormApp.Common.CustomHandler" />
  </handlers>
</system.webServer>

 

[정상 케이스]

 

 

[asmx 요청의 경우]

 

 

 

https://www.codeguru.com/csharp/.net/net_asp/article.php/c19389/HTTP-Handlers-and-HTTP-Modules-in-ASPNET.htm

https://stackoverflow.com/questions/391130/what-is-an-httphandler-in-asp-net

728x90