ASP.Net에서 HTTPHandlers를 사용하는 방법

HTTPhandler는 요청에 대한 응답으로 실행되고 확장을 기반으로 특정 요청을 처리하는 데 사용되는 끝점으로 정의 될 수 있습니다. ASP.Net 런타임 엔진은 요청 URL의 파일 확장명을 기반으로 들어오는 요청을 처리 할 적절한 처리기를 선택합니다. 반대로 HttpModule은 ASP.Net 요청 처리 파이프 라인의 일부인 구성 요소이며 응용 프로그램에 대한 모든 요청에 ​​대해 호출됩니다. HTTPhandler와 HttpModules의 기본 목적은 파이프 라인에 전처리 로직을 주입하는 것입니다.

애플리케이션이 다양한 크기의 이미지를 제공해야한다고 가정합니다. 사용자 지정 HTTPhandler를 활용하여 해당 이미지의 크기를 조정하고 응답을 다시 보낼 수 있습니다. 사용자 지정 HTTPhandler를 사용할 수있는 또 다른 시나리오는 확장을 기반으로 애플리케이션에서 일부 전처리 논리를 실행하려는 경우입니다. ASP.Net 페이지에서도 HTTPhandler로 할 수있는 거의 모든 작업을 수행 할 수 있지만 HTTPhandler는 웹 페이지보다 훨씬 더 이식 가능하고 재사용이 가능합니다.

리소스에 대한 요청이 ASP.Net 엔진에 들어 오면 ASP.Net 작업자 프로세스는 확장을 기반으로 요청을 서버로 보내는 적절한 HTTPhandler를 차례로 인스턴스화합니다. ASP.Net의 HTTPhandler는 IHTTPhandler 인터페이스를 구현하는 클래스입니다. 덧붙여서 IHTTPhandler 인터페이스는 System.Web 네임 스페이스에서 사용할 수 있습니다. PageHandlerFactory는 IHTTPhandlerFactory 인터페이스를 구현하고 GetHandler라는 메서드를 포함하고 있으며,이 메서드는 특정 요청을 서버에 적절한 처리기를 반환하는 역할을합니다.

MSDN은 "ASP.Net HTTPhandler는 ASP.Net 웹 응용 프로그램에 대한 요청에 대한 응답으로 실행되는 프로세스 ("종점 "이라고도 함)입니다. 가장 일반적인 처리기는 ASP.Net 페이지 처리기입니다. .aspx 파일을 처리합니다. 사용자가 .aspx 파일을 요청하면 페이지 처리기를 통해 페이지에서 요청이 처리됩니다. "

사용자 지정 HTTPhandler 만들기

이 섹션에서는 ASP.Net에서 사용자 지정 HTTPhandler를 만드는 방법에 대해 알아 봅니다. 사용자 지정 HTTPhandler를 빌드하려면 아래 코드 조각에 표시된대로 IHTTPhandler를 구현하는 클래스를 만듭니다.

namespace CustomHTTPhandler

{

   public class CustomHTTPhandler : IHTTPhandler

   {

       public bool IsReusable

       {

           get { return false; }

       }

       public void ProcessRequest(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }

}

사용자 지정 HTTP 처리기에는 IsReusable이라는 속성과 ProcessRequest라는 메서드가 있어야합니다. 전자는 핸들러를 재사용 할 수 있는지 여부를 지정하는 데 사용되지만 후자는 실제 처리를 수행하는 방법입니다. 본질적으로 모든 사용자 지정 HTTPHandler는 IHttphandler 인터페이스를 구현하고이 두 멤버를 정의해야합니다.

핸들러 등록

HTTPhandler에 대한 매핑 정보는 구성 파일에서 사용할 수 있습니다. machine.config 파일의 섹션은 다음과 같습니다.

이제 사용자 지정 HTTPhandler가 호출되어야하는시기를 런타임에 알려야합니다. 이것을 어디에 지정해야합니까? web.config 파일에서 이러한 세부 정보를 지정할 수 있습니다. 애플리케이션 구성 파일의 구성 섹션을 사용하여 HTTP 처리기를 추가 및 제거 할 수 있습니다. 애플리케이션의 web.config 파일에 핸들러를 등록하는 방법은 다음과 같습니다.

  

그래서 우리는 여기서 무엇을 했습니까? 방금 처리기를 등록하고 .idgaspx 확장에 대한 요청이 도착하면 해당 요청이 CustomHTTPhandler라는 사용자 지정 Http 처리기로 라우팅되도록 지정했습니다.

.aspx 웹 페이지와 달리 HTTPhandler에는 시각적 요소가 없습니다. 사용자 지정 라이브러리에서 HTTP 처리기를 만든 다음 필요할 때 재사용 할 수 있습니다.

비동기 HTTPHandler

최신 버전의 ASP.Net은 비동기 Http 처리기를 지원합니다. async / await 및 TPL을 활용하여 ASP.Net에서 비동기 HTTP 처리기를 빌드 할 수 있습니다. 사용자 지정 비동기 HTTPhandler를 만들려면 HttpTaskAsyncHandler 클래스를 상속해야합니다. HttpTaskAsyncHandler 추상 클래스는 차례로 IHttpAsyncHandler 및 IHTTPhandler 인터페이스를 구현합니다. 다음 코드 스 니펫은 사용자 지정 비동기 HTTP 핸들러가 한 눈에 어떻게 보이는지 보여줍니다.

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }