Comment travailler avec HTTPHandlers dans ASP.Net

Un gestionnaire HTTP peut être défini comme un point final qui est exécuté en réponse à une demande et est utilisé pour traiter des demandes spécifiques basées sur des extensions. Le moteur d'exécution ASP.Net sélectionne le gestionnaire approprié pour traiter une demande entrante en fonction de l'extension de fichier de l'URL de la demande. Au contraire, un HttpModule est un composant qui fait partie du pipeline de traitement des requêtes ASP.Net et est appelé à chaque requête adressée à votre application. Notez que l'objectif de base des gestionnaires HTTP et HttpModules est d'injecter une logique de prétraitement dans le pipeline.

Supposons que votre application ait besoin de diffuser des images de différentes tailles - vous pouvez profiter d'un gestionnaire HTTP personnalisé pour redimensionner ces images et renvoyer la réponse. Un autre scénario dans lequel vous souhaiterez peut-être utiliser un gestionnaire HTTP personnalisé est celui où vous souhaitez exécuter une logique de prétraitement dans votre application en fonction des extensions. Bien que vous puissiez faire presque tout ce que vous pouvez faire avec HTTPhandler également avec votre page ASP.Net, les HTTPhandlers sont beaucoup plus portables et réutilisables que vos pages Web.

Lorsqu'une demande de ressource parvient au moteur ASP.Net, le processus de travail ASP.Net instancie à son tour le gestionnaire HTTP approprié pour traiter la demande en fonction de l'extension. Un HTTPhandler dans ASP.Net est une classe qui implémente l'interface IHTTPhandler. Incidemment, l'interface IHTTPhandler est disponible dans l'espace de noms System.Web. Notez que PageHandlerFactory implémente l'interface IHTTPhandlerFactory et contient une méthode appelée GetHandler qui à son tour est chargée de renvoyer le gestionnaire approprié au serveur de la demande particulière.

Le MSDN indique: «Un gestionnaire HTTP ASP.Net est le processus (souvent appelé« point de terminaison ») qui s'exécute en réponse à une demande adressée à une application Web ASP.Net. Le gestionnaire le plus courant est un gestionnaire de page ASP.Net qui traite les fichiers .aspx. Lorsque les utilisateurs demandent un fichier .aspx, la demande est traitée par la page via le gestionnaire de pages. "

Créer un gestionnaire HTTP personnalisé

Dans cette section, nous allons explorer comment nous pouvons créer un gestionnaire HTTP personnalisé dans ASP.Net. Pour créer un HTTPhandler personnalisé, créez une classe qui implémente le IHTTPhandler comme indiqué dans l'extrait de code ci-dessous.

namespace CustomHTTPhandler

{

   public class CustomHTTPhandler : IHTTPhandler

   {

       public bool IsReusable

       {

           get { return false; }

       }

       public void ProcessRequest(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }

}

Notez que votre gestionnaire HTTP personnalisé doit avoir une propriété appelée IsReusable et une méthode appelée ProcessRequest. Alors que le premier est utilisé pour spécifier si le gestionnaire peut être réutilisé, le second est une méthode qui effectue le traitement à votre place. En substance, tout HTTPHandler personnalisé doit implémenter l'interface IHttphandler et définir ces deux membres.

Enregistrement de votre gestionnaire

Les informations de mappage pour les gestionnaires HTTP sont disponibles dans les fichiers de configuration. Voici à quoi pourrait ressembler une section de votre fichier machine.config.

Désormais, vous devez également informer le moteur d'exécution quand votre gestionnaire HTTP personnalisé doit être appelé. Où devez-vous le préciser? Eh bien, vous pouvez spécifier ces détails dans le fichier web.config. Vous pouvez ajouter et supprimer des gestionnaires HTTP à l'aide de la section de configuration dans le fichier de configuration de vos applications. Voici comment enregistrer votre gestionnaire dans le fichier web.config de l'application.

  

Alors, qu'avons-nous fait ici? Nous venons d'enregistrer notre gestionnaire et avons spécifié que si une demande d'extension de .idgaspx arrive, cette demande doit être acheminée vers le gestionnaire Http personnalisé nommé CustomHTTPhandler.

Notez que contrairement aux pages Web .aspx, les gestionnaires HTTP n'ont pas d'éléments visuels. Vous pouvez créer vos gestionnaires HTTP dans une bibliothèque personnalisée, puis les réutiliser au fur et à mesure de vos besoins.

HTTPHandlers asynchrones

Les versions plus récentes d'ASP.Net prennent en charge les gestionnaires Http asynchrones. Vous pouvez tirer parti de async / await et du TPL pour créer des gestionnaires HTTP asynchrones dans ASP.Net. Pour créer un gestionnaire HTTP asynchrone personnalisé, vous devez hériter de la classe HttpTaskAsyncHandler. La classe abstraite HttpTaskAsyncHandler implémente à son tour les interfaces IHttpAsyncHandler et IHTTPhandler. L'extrait de code suivant illustre à quoi ressemble notre gestionnaire HTTP asynchrone personnalisé à première vue.

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }