Ma question est simple (bien que la réponse ne sera probablement pas): j'essaie de décider comment implémenter un gestionnaire de téléchargement côté serveur dans C #/ASP.NET.
J'ai utilisé à la fois HttpModules (interface IHttpModule) et HttpHandlers (interface IHttpHandler) et il me semble que je pourrais implémenter cela en utilisant l'un ou l'autre mécanisme. Il me vient également à l'esprit que je ne comprends pas les différences entre les deux.
Donc ma question est la suivante: Dans quels cas choisirais-je d'utiliser IHttpHandler au lieu de IHttpModule (et vice-versa)?
L'un est-il exécuté beaucoup plus haut dans le pipeline? Est-il beaucoup plus facile à configurer dans certaines situations? Ne fonctionne-t-on pas bien avec une sécurité moyenne?
Un gestionnaire HTTP ASP.NET est le processus (souvent appelé "point de terminaison") qui s'exécute en réponse à une demande adressée à ASP.NET Application Web. Le gestionnaire le plus courant est un gestionnaire de pages 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. Vous pouvez créer vos propres gestionnaires HTTP qui rendent la sortie personnalisée au navigateur.
Les utilisations typiques des gestionnaires HTTP personnalisés sont les suivantes:
Un module HTTP est un assembly appelé à chaque demande adressée à votre application. Les modules HTTP sont appelés dans le cadre du pipeline de demandes ASP.NET et ont accès aux événements du cycle de vie tout au long de la demande. Les modules HTTP vous permettent d'examiner les demandes entrantes et sortantes et de prendre des mesures en fonction de la demande.
Les utilisations typiques des modules HTTP sont les suivantes:
Comme indiqué ici , les HttpModules sont des classes simples qui peuvent se connecter au pipeline de traitement des demandes, tandis que les HttpHandlers diffèrent des HttpModules non seulement en raison de leur position dans le pipeline de traitement des demandes, mais aussi parce qu'ils doivent être mappés sur une extension de fichier spécifique.
IHttpModule
vous donne beaucoup plus de contrôle, vous pouvez essentiellement contrôler tout du trafic dirigé vers votre application Web. IHttpHandler
vous donne moins de contrôle (le trafic est filtré avant il atteint votre gestionnaire), mais si cela est suffisant pour vos besoins, je ne vois aucune raison d'utiliser le IHttpModule
.
Quoi qu'il en soit, il est probablement préférable d'avoir votre logique personnalisée dans une classe distincte, puis d'utiliser simplement cette classe à partir de IHttpModule
ou IHttpHandler
. De cette façon, vous n'avez pas vraiment à vous soucier de choisir l'un ou l'autre. En fait, vous pouvez créer une classe supplémentaire qui implémente les deuxIHttpHandler
et IHttpModule
, puis décider quoi utiliser en la définissant dans Web.config
.
15 secondes a un joli petit tutoriel donnant un exemple pratique
Les modules sont destinés à gérer les événements déclenchés par l'application avant et après le traitement effectif de la demande par le gestionnaire. Les gestionnaires, d'autre part, n'ont pas la possibilité de s'abonner à des événements d'application et, au lieu de cela, obtiennent simplement leur méthode ProcessRequest invoquée pour le travail "principal" de traitement d'une demande spécifique.
Jetez un œil à cette documentation de Microsoft (à mi-chemin de la page dans la section "La demande est traitée par le pipeline HttpApplication"):
http://msdn.Microsoft.com/en-us/library/bb470252.aspx
Vous pouvez voir à l'étape 15 où le gestionnaire a sa chance de s'exécuter. Tous les événements avant et après cette étape sont disponibles pour l'interception par les modules, mais pas les gestionnaires.
Selon les fonctionnalités spécifiques que vous essayez d'obtenir, vous pouvez utiliser un gestionnaire ou un module pour implémenter un gestionnaire de téléchargement. Vous pourriez même finir par utiliser les deux.
Quelque chose à considérer pourrait utiliser un gestionnaire de téléchargement déjà écrit.
En voici une gratuite et open source:
http://www.brettle.com/neatupload
En voici une commerciale:
http://krystalware.com/Products/SlickUpload/
Si vous regardez la documentation de NeatUpload, vous verrez qu'elle vous oblige à configurer un module.