di: Giuseppe Marchi 04 Aprile 2007
Il nostro primo HTTP Handler è stato dichiarato per gestire ogni tipo di richiesta verso il file "HelloWorld.aspx"; questo file non esiste fisicamente sul server, ma è stato "mappato" dal nostro handler. La cosa bella è la possibilità di mappare con alcuni HTTP Handler tutti i percorsi gestiti da IIS, quindi pagine web (.aspx, .html, etc…), immagini (.jpg, .gif, etc.) o il contenuto di intere directory, questo sempre ammesso che il nostro web server ci permetta di farlo. Purtroppo alcuni servizi di hosting limitano la gestione dei path solo alle estensioni più note di ASP.NET.
Se vogliamo creare un HTTP Handler personalizzato, senza doverlo inserire in un assembly specifico e senza doverlo registrare nel web.config dell'applicazione, possiamo avvalerci di un file con estensione .ashx, estensione predefinita per gli HTTP Handler generici. Tale file sarà segnato dalla direttiva iniziale "WebHandler" e conterrà una classe .NET che implementa l'interfaccia IHttpHandler (perché non è possibile creare degli handler senza ereditare da tale interfaccia).
Il nostro handler generico, che non fa altro che stampare a video una frase in formato file di testo, avrà quindi questa forma:
<%@ WebHandler Language="C#" Class="HandlerGenerico" %>
using System;
using System.Web;
public class HandlerGenerico : IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World, from HTTP Handler !");
}
}
Vediamo ora, in che modo possiamo avvalerci degli HTTP Handler di ASP.NET per aggiungere delle funzionalità un po' più complesse e di grande impatto al nostro sito web.
Come esempio, possiamo creare un gestore in grado di mappare tutte le richieste HTTP a tutti i file con estensione ".jpg" presenti in una specifica directory; come funzionalità aggiunta, tali immagini verranno decorate con un testo che indica la data di creazione del file (questa tecnica di firmare le immagini è detta watermark, ed è molto utile per coprire le proprie risorse grafiche con il copyright).
Per raggiungere il nostro scopo, ci dobbiamo avvalere di alcune classi del namespace System.Drawing, in modo da permetterci di manipolare l'immagine e salvarla nello stream della risposta HTTP.
public class ImageHandler : IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
// prelevo informazioni su file fisico richiesto
Bitmap b = new Bitmap(context.Request.PhysicalPath);
FileInfo fi = new FileInfo(context.Request.PhysicalPath);
Graphics g = Graphics.FromImage(b);
// imposto l'allineamento della stringa da stampare (in fondo a destra)
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Far;
format.LineAlignment = StringAlignment.Far;
// disegno la stringa
g.DrawString(fi.CreationTime.ToLongDateString(),
new Font("Verdana", 20, FontStyle.Bold),
Brushes.Orange,
new Rectangle(10, 10, b.Width - 10, b.Height - 10), format);
g.Dispose();
// salvo la stringa nel buffer di risposta
b.Save(context.Response.OutputStream, ImageFormat.Jpeg);
b.Dispose();
}
}
Dopo aver inserito questo handler nella directory App_Code dell'applicazione web, lo registriamo nel web.config:
<system.web>
<httpHandlers>
<add type="HelloWorldHandler" verb="*" path="HelloWorld.html" />
<add type="ImageHandler" verb="*" path="Images/*.jpg" />
</httpHandlers>
</system.web>
In questo modo, tutte le richieste alle immagini jpeg presenti nella directory "/Images", saranno segnate con la data della loro creazione.
Questa è solo una breve panoramica riguardo le tecniche disponibili per la creazione e l'utilizzo degli HTTP Handler di ASP.NET; utili implementazioni sono legate ad argomenti come l'url rewriting, il watermarking sulle immagini o semplicemente sulla realizzazione di filtri su specifiche richieste HTTP. Per un esempio di url rewriting tramite http Handler questo tutorial.
Gli HTTP Handler, inoltre, svolgono una funzione molto simile a quella che è propria dei filtri ISAPI di IIS, con la differenza che hanno la possibilità di essere gestiti direttamente all'interno dell'applicazione web prescelta, senza dover metter mano alle configurazioni del web server, cosa che non è sempre possibile in ambienti di produzione. Chiaramente, gli sviluppi possibili legati agli HTTP Handler sono veramente infiniti e dettati dall'immaginazione dello sviluppatore.
Guida Windows Azure Code SnippetsLe migliori pratiche per far girare le applicazioni "in the cloud",... |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |