Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS .NET FAQs .NET TUTORIELS .NET SOURCES .NET LIVRES .NET OUTILS .NET BLOG .NET DOTNET TV

Les HttpHandler

Par NICOLAS HUMANN (Blog) (CV)
 


I. Définitions
II. Petite histoire du protocole http et de l'html
III. Exemple d'utilisation
IV. Conclusion
V. Téléchargements


I. Définitions

Un httphandler est une classe qui répond à une requête http alors qu'habituellement, lorsque vous consultez un site asp.net, c'est un page aspx qui est demandé au serveur.


II. Petite histoire du protocole http et de l'html

Prenons l'exemple d'une image. Dans le code html, chaque balise image a un attribut src, qui correspond à l'url où se trouve l'image. Donc lorsque le navigateur reçoit une page html qui contient des balises images, il fait une nouvelle requête vers le serveur en lui demandant l'image correspondante. Or dans le cas où une image est stockée en base de données, on est bien embêté. C'est pour cela (entre autre) que l'httphandler existe.


III. Exemple d'utilisation

Dans notre exemple, nous allons créer une miniature à partir d'une image et la renvoyer. Pour commencer, rajoutons à notre projet web, une classe qui implémente l'interface IHttpHandler.
public class ImageHandler:IHttpHandler
{
    public ImageHandler()
    {
    }

    #region IHttpHandler Members

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        
    }

    #endregion
}
Ensuite rajoutons l'Handler dans le web.config à l'interieur de system.web. Ceci permet de pointer notre classe à une url. Donc lorsque l'on demandera Image.axd, ce sera notre classe qui sera appelée, nous pouvons créer autant de Handler que l'on désire.
<httpHandlers>
	<add path="Image.axd" verb="*" type="ImageHandler"  validate="True"/>
</httpHandlers>
Revenons à notre classe. La méthode ProcessRequest est la clé de la classe. C'est cette méthode qui est appelée lors de la requête. On retrouve dans le context tout ce que l'on a besoin. Rajoutons dans cette méthode le bout de code pour réaliser la miniature et la renvoyer.
public void ProcessRequest(HttpContext context)
{
	// Recupere le chemin sur le disque
	string path = context.Server.MapPath("~/images/");
	// Concatenation du path au nom de l'image fournis par la query string 
	string imageFile = string.Concat(path, context.Request.QueryString["img"]);
	// Est ce que le fichier existe ?
	if (File.Exists(imageFile) == false)
    	imageFile = string.Concat(path, "noimg.jpg");
	// Chargement de l'image
	System.Drawing.Image img = System.Drawing.Image.FromFile(imageFile);
	// Resalisation de la miniature en 200x200
	img = img.GetThumbnailImage(200, 200, null, new IntPtr());
	// Envoie de l'image au client
	img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
	// Liberer les ressources
	img.Dispose();
}
Pour finir n'oublions pas d'ajouter une page aspx et rajoutons une image.
<@ Page="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" >
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title > Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <img src="Image.axd?img=soleil.jpg" />
    </div>     
    </form>
</body>
</html>
Voila tout est fait, il ne reste plus qu'à tester. Si on veut changer d'image, il faut changer img=soleil.jpg par une autre image.


IV. Conclusion

Les HttpHandlers sont en effet très utiles, principalement pour renvoyer des informations depuis une base de données. J'espère que ce court tutorial vous sera utile.


V. Téléchargements




Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005 Nicolas Humann . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Responsable bénévole de la rubrique DotNET : Jérôme Lambert (Cardi) - Contacter par EMail :
Vos questions techniques : forum d'entraide DotNET - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.