Jak pracować z HTTPHandlers w ASP.Net

HTTPhandler może być zdefiniowany jako punkt końcowy, który jest wykonywany w odpowiedzi na żądanie i służy do obsługi określonych żądań na podstawie rozszerzeń. Mechanizm wykonawczy ASP.Net wybiera odpowiednią procedurę obsługi do obsługi przychodzącego żądania na podstawie rozszerzenia pliku adresu URL żądania. Wręcz przeciwnie, HttpModule to składnik, który jest częścią potoku przetwarzania żądań ASP.Net i jest wywoływany przy każdym żądaniu skierowanym do aplikacji. Należy zauważyć, że podstawowym celem zarówno obsługi protokołu HTTP, jak i modułu HttpModules jest wstrzyknięcie logiki przetwarzania wstępnego do potoku.

Załóżmy, że Twoja aplikacja musi obsługiwać obrazy o różnych rozmiarach - możesz skorzystać z niestandardowego programu HTTPhandler, aby zmienić rozmiar tych obrazów i odesłać odpowiedź. Innym scenariuszem, w którym możesz chcieć użyć niestandardowego HTTPhandlera, jest wykonanie pewnej logiki przetwarzania wstępnego w aplikacji na podstawie rozszerzeń. Chociaż możesz zrobić prawie wszystko, co możesz zrobić za pomocą HTTPhandler również ze stroną ASP.Net, HTTPhandlers są znacznie bardziej przenośne i nadają się do wielokrotnego użytku niż strony internetowe.

Gdy żądanie zasobu przychodzi do silnika ASP.Net, proces roboczy ASP.Net z kolei tworzy instancję odpowiedniego protokołu HTTPhandler, aby serwer żądania oparty na rozszerzeniu. HTTPhandler w ASP.Net to klasa implementująca interfejs IHTTPhandler. Nawiasem mówiąc, interfejs IHTTPhandler jest dostępny w przestrzeni nazw System.Web. Zwróć uwagę, że PageHandlerFactory implementuje interfejs IHTTPhandlerFactory i zawiera metodę o nazwie GetHandler, która z kolei jest odpowiedzialna za zwrócenie odpowiedniej procedury obsługi do serwera określonego żądania.

MSDN stwierdza: „ASP.Net HTTPhandler to proces (często nazywany„ punktem końcowym ”), który jest uruchamiany w odpowiedzi na żądanie skierowane do aplikacji sieci Web ASP.Net. Najpopularniejszym programem obsługi jest program obsługi stron ASP.Net który przetwarza pliki .aspx. Gdy użytkownicy żądają pliku .aspx, żądanie jest przetwarzane przez stronę za pośrednictwem programu obsługi stron. "

Tworzenie niestandardowego HTTPhandlera

W tej sekcji omówimy, w jaki sposób możemy zbudować niestandardowy HTTPhandler w ASP.Net. Aby zbudować niestandardowy protokół HTTPhandler, utwórz klasę, która implementuje IHTTPhandler, jak pokazano w poniższym fragmencie kodu.

namespace CustomHTTPhandler

{

   public class CustomHTTPhandler : IHTTPhandler

   {

       public bool IsReusable

       {

           get { return false; }

       }

       public void ProcessRequest(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }

}

Zwróć uwagę, że niestandardowa procedura obsługi HTTP powinna mieć właściwość o nazwie IsReusable i metodę o nazwie ProcessRequest. Podczas gdy pierwsza jest używana do określenia, czy moduł obsługi może być ponownie użyty, druga jest metodą, która wykonuje rzeczywiste przetwarzanie za Ciebie. Zasadniczo każdy niestandardowy HTTPHandler powinien implementować interfejs IHttphandler i definiować te dwa elementy.

Rejestracja twojego handlera

Informacje o mapowaniu dla obsługi HTTP są dostępne w plikach konfiguracyjnych. Oto, jak może wyglądać sekcja pliku machine.config.

Teraz musisz również powiadomić środowisko wykonawcze, kiedy należy wywołać niestandardowy protokół HTTPhandler. Gdzie należy to określić? Dobrze można określić takie szczegóły w pliku web.config. Możesz dodawać i usuwać programy obsługi HTTP za pomocą sekcji konfiguracyjnej w pliku konfiguracyjnym aplikacji. Oto jak możesz zarejestrować swój program obsługi w pliku web.config aplikacji.

  

Więc co tutaj zrobiliśmy? Właśnie zarejestrowaliśmy nasz program obsługi i określiliśmy, że jeśli nadejdzie jakiekolwiek żądanie dotyczące rozszerzenia .idgaspx, takie żądanie powinno zostać skierowane do niestandardowego programu obsługi HTTP o nazwie CustomHTTPhandler.

Zauważ, że w przeciwieństwie do stron internetowych .aspx, procedury obsługi HTTP nie mają elementów wizualnych. Możesz utworzyć obsługę HTTP w bibliotece niestandardowej, a następnie używać ich ponownie, gdy są potrzebne.

Asynchroniczne HTTPHandlers

Nowsze wersje ASP.Net zapewniają obsługę asynchronicznych programów obsługi HTTP. Możesz skorzystać z async / await i TPL do tworzenia asynchronicznych procedur obsługi HTTP w ASP.Net. Aby utworzyć niestandardowy asynchroniczny protokół HTTPhandler, należy odziedziczyć klasę HttpTaskAsyncHandler. Klasa abstrakcyjna HttpTaskAsyncHandler z kolei implementuje interfejsy IHttpAsyncHandler i IHTTPhandler. Poniższy fragment kodu ilustruje, jak na pierwszy rzut oka wygląda nasz niestandardowy asynchroniczny protokół HTTPhandler.

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }