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)
{
string path = context.Server.MapPath("~/images/");
string imageFile = string.Concat(path, context.Request.QueryString["img"]);
if (File.Exists(imageFile) == false)
imageFile = string.Concat(path, "noimg.jpg");
System.Drawing.Image img = System.Drawing.Image.FromFile(imageFile);
img = img.GetThumbnailImage(200, 200, null, new IntPtr());
img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
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
 
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.
|