Programování

Jak pracovat s HTTPHandlers v ASP.Net

HTTPhandler může být definován jako koncový bod, který je proveden v reakci na požadavek a používá se ke zpracování konkrétních požadavků na základě rozšíření. Modul runtime ASP.Net vybere příslušnou obslužnou rutinu pro doručení příchozího požadavku na základě přípony souboru adresy URL požadavku. Naopak, HttpModule je součást, která je součástí kanálu zpracování požadavků ASP.Net a je volána při každém požadavku provedeném ve vaší aplikaci. Všimněte si, že základním cílem HTTPhandlerů i HttpModules je vložit logiku předzpracování do kanálu.

Předpokládejme, že vaše aplikace musí zobrazovat obrázky různých velikostí - můžete využít výhod vlastního HTTPhandleru, který změní velikost těchto obrázků a odešle odpověď zpět. Dalším scénářem, kde budete možná chtít použít vlastní HTTPhandler, je situace, kdy chcete ve své aplikaci provést nějakou logiku předběžného zpracování na základě rozšíření. Ačkoli můžete dělat téměř cokoli, co můžete dělat s HTTPhandler také se svou stránkou ASP.Net, HTTPhandlers jsou mnohem přenosnější a znovu použitelné než vaše webové stránky.

Když žádost o prostředek přijde na modul ASP.Net, pracovní proces ASP.Net zase vytvoří instanci příslušného HTTPhandleru k serverování požadavku na základě rozšíření. HTTPhandler v ASP.Net je třída, která implementuje rozhraní IHTTPhandler. Mimochodem, rozhraní IHTTPhandler je k dispozici ve jmenném prostoru System.Web. Všimněte si, že PageHandlerFactory implementuje rozhraní IHTTPhandlerFactory a obsahuje metodu nazvanou GetHandler, která je zase zodpovědná za vrácení příslušné obslužné rutiny na server konkrétního požadavku.

MSDN uvádí: "HTTP.Handler ASP.Net je proces (často označovaný jako" koncový bod "), který běží jako odpověď na požadavek odeslaný webové aplikaci ASP.Net. Nejběžnějším obslužným programem je obslužný program stránky ASP.Net. která zpracovává soubory .aspx. Když uživatelé požadují soubor .aspx, stránka je zpracována stránkou prostřednictvím obslužné rutiny stránky. “

Vytvoření vlastního HTTPhandleru

V této části prozkoumáme, jak můžeme vytvořit vlastní HTTPhandler v ASP.Net. Chcete-li vytvořit vlastní HTTPhandler, vytvořte třídu, která implementuje IHTTPhandler, jak je ukázáno v fragmentu kódu níže.

jmenný prostor CustomHTTPhandler

{

veřejná třída CustomHTTPhandler: IHTTPhandler

   {

public bool IsReusable

       {

get {return false; }

       }

public void ProcessRequest (HttpContext kontext)

       {

hodit nový NotImplementedException ();

       }

   }

}

Všimněte si, že váš vlastní obslužný program HTTP by měl mít vlastnost nazvanou IsReusable a metodu nazvanou ProcessRequest. Zatímco první se používá k určení, zda lze obslužnou rutinu znovu použít, druhá je metoda, která za vás provede skutečné zpracování. V podstatě by každý vlastní HTTPHandler měl implementovat rozhraní IHttphandler a definovat tyto dva členy.

Registrace vašeho psovoda

Mapovací informace pro HTTPhandlers jsou k dispozici v konfiguračních souborech. Zde může vypadat část vašeho souboru machine.config.

Nyní byste také měli runtime vědět, kdy by měl být vyvolán váš vlastní HTTPhandler. Kde byste to měli specifikovat? Tyto podrobnosti lze specifikovat v souboru web.config. HTTPhandlers můžete přidávat a odebírat pomocí konfigurační sekce v konfiguračním souboru aplikací. Tady je postup, jak můžete zaregistrovat obslužnou rutinu v souboru web.config aplikace.

  

Co jsme tady udělali? Právě jsme zaregistrovali naši obslužnou rutinu a uvedli jsme, že pokud přijde jakýkoli požadavek na rozšíření .idgaspx, měl by být takový požadavek směrován na vlastní obslužnou rutinu Http s názvem CustomHTTPhandler.

Všimněte si, že na rozdíl od webových stránek .aspx nemají HTTPhandlers vizuální prvky. Svůj obslužný program HTTP můžete vytvořit ve vlastní knihovně a poté jej znovu použít podle potřeby.

Asynchronní HTTPHandlers

Novější verze ASP.Net poskytují podporu pro asynchronní obslužné rutiny Http. Můžete využít výhod async / await a TPL k vytváření asynchronních HTTPhandlerů v ASP.Net. Chcete-li vytvořit vlastní asynchronní HTTPhandler, měli byste zdědit třídu HttpTaskAsyncHandler. HttpTaskAsyncHandler abstraktní třída zase implementuje rozhraní IHttpAsyncHandler a IHTTPhandler. Následující fragment kódu ukazuje, jak náš vlastní asynchronní HTTPhandler vypadá na první pohled.

veřejná třída CustomHTTPhandler: HttpTaskAsyncHandler

   {

veřejné přepsání Task ProcessRequestAsync (HttpContext kontext)

       {

hodit nový NotImplementedException ();

       }

   }