Come lavorare con HTTPHandlers in ASP.Net

Un gestore HTTP può essere definito come un punto finale che viene eseguito in risposta a una richiesta e viene utilizzato per gestire richieste specifiche in base alle estensioni. Il motore di runtime ASP.Net seleziona il gestore appropriato per servire una richiesta in entrata in base all'estensione del file dell'URL della richiesta. Al contrario, un HttpModule è un componente che fa parte della pipeline di elaborazione delle richieste ASP.Net e viene chiamato a ogni richiesta effettuata all'applicazione. Si noti che l'obiettivo di base di entrambi i gestori HTTP e HttpModules è iniettare la logica di pre-elaborazione nella pipeline.

Supponi che la tua applicazione debba fornire immagini di varie dimensioni: puoi sfruttare un gestore HTTP personalizzato per ridimensionare quelle immagini e inviare la risposta. Un altro scenario in cui potresti voler utilizzare un gestore HTTP personalizzato è quando desideri eseguire una logica di pre-elaborazione nella tua applicazione basata sulle estensioni. Sebbene tu possa fare quasi tutto ciò che puoi fare con HTTPhandler anche con la tua pagina ASP.Net, i gestori HTTP sono molto più portabili e riutilizzabili delle tue pagine web.

Quando una richiesta di una risorsa arriva al motore ASP.Net, il processo di lavoro ASP.Net a sua volta istanzia il gestore HTTP appropriato per server la richiesta in base all'estensione. Un HTTPhandler in ASP.Net è una classe che implementa l'interfaccia IHTTPhandler. Per inciso, l'interfaccia IHTTPhandler è disponibile nello spazio dei nomi System.Web. Si noti che PageHandlerFactory implementa l'interfaccia IHTTPhandlerFactory e contiene un metodo chiamato GetHandler che a sua volta è responsabile della restituzione del gestore appropriato al server della richiesta specifica.

L'MSDN afferma: "Un gestore HTTP ASP.Net è il processo (spesso denominato" endpoint ") che viene eseguito in risposta a una richiesta effettuata a un'applicazione Web ASP.Net. Il gestore più comune è un gestore di pagine ASP.Net che elabora i file .aspx. Quando gli utenti richiedono un file .aspx, la richiesta viene elaborata dalla pagina tramite il gestore della pagina. "

Creazione di un gestore HTTP personalizzato

In questa sezione esploreremo come possiamo costruire un gestore HTTP personalizzato in ASP.Net. Per creare un gestore HTTP personalizzato, crea una classe che implementi il ​​gestore IHTTP come mostrato nello snippet di codice di seguito.

namespace CustomHTTPhandler

{

   public class CustomHTTPhandler : IHTTPhandler

   {

       public bool IsReusable

       {

           get { return false; }

       }

       public void ProcessRequest(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }

}

Tieni presente che il tuo gestore HTTP personalizzato dovrebbe avere una proprietà chiamata IsReusable e un metodo chiamato ProcessRequest. Mentre il primo viene utilizzato per specificare se il gestore può essere riutilizzato, il secondo è un metodo che esegue l'effettiva elaborazione per te. In sostanza, qualsiasi HTTPHandler personalizzato dovrebbe implementare l'interfaccia IHttphandler e definire questi due membri.

Registrazione del tuo gestore

Le informazioni sulla mappatura per i gestori HTTP sono disponibili nei file di configurazione. Ecco come potrebbe apparire una sezione del tuo file machine.config.

Ora, dovresti anche far sapere al runtime quando il tuo gestore HTTP personalizzato dovrebbe essere invocato. Dove dovresti specificarlo? Bene, puoi specificare tali dettagli nel file web.config. È possibile aggiungere e rimuovere gestori HTTP utilizzando la sezione di configurazione nel file di configurazione delle applicazioni. Ecco come registrare il gestore nel file web.config dell'applicazione.

  

Allora, cosa abbiamo fatto qui? Abbiamo appena registrato il nostro gestore e specificato che se arriva una richiesta per un'estensione di .idgaspx, tale richiesta deve essere indirizzata al gestore HTTP personalizzato denominato CustomHTTPhandler.

Si noti che a differenza delle pagine Web .aspx, i gestori HTTP non hanno elementi visivi. Puoi creare i tuoi gestori HTTP in una libreria personalizzata e quindi riutilizzarli come e quando sono necessari.

HTTPHandlers asincrono

Le versioni più recenti di ASP.Net forniscono supporto per gestori Http asincroni. Puoi sfruttare async / await e TPL per creare gestori HTTP asincroni in ASP.Net. Per creare un gestore HTTP asincrono personalizzato, è necessario ereditare la classe HttpTaskAsyncHandler. La classe astratta HttpTaskAsyncHandler a sua volta implementa le interfacce IHttpAsyncHandler e IHTTPhandler. Il seguente frammento di codice illustra come appare a prima vista il nostro gestore HTTP asincrono personalizzato.

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }