Les HttpHandler

N'hésitez pas à commenter cet article ! Commentez Donner une note à l'article (5)

Article lu   fois.

L'auteur

Site personnelSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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.

 
Sélectionnez

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.

 
Sélectionnez

<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.

 
Sélectionnez

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.

 
Sélectionnez

<%@ Page Language="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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

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.