La tecnica dell'Url Rewriting, che permette all'applicazione di gestire le proprie risorse interne con nomi e indirizzi diversi da quelli specificati nella richiesta HTTP, può essere effettuata sia attraverso un HttpHandler che attraverso un HttpModule.
Analizzando la seconda alternativa, è necessario implementare l'event handler dell'evento BeginRequest e chiamare il metodo Context.RewritePath per far puntare il runtime di ASP.NET ad un'altra risorsa.

public class DefaultHttpModule : IHttpModule

{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
//... HttpContext.Current.RewritePath(redirUrl);
}

public void Dispose()
{
}
}

E fin qui tutto bene.
Ora però, se proviamo a mettere in una delle pagine gestite dall'HttpModule un bel Button e proviamo a far scatenare il PostBack della pagina, vedrete che l'indirizzo mappato scompare e apparirà quello della risorsa vera e propria che gestisce la richiesta.

Come fare ?
Durante l'evento Load della pagina, è d'obbligo utilizzare di nuovo il metodo RewritePath per far puntare il runtime all'url originale anche se è stato effettuato un postback della pagina.

Context.RewritePath(Path.GetFileName(Request.RawUrl));

Questa la linea di codice senza la quale l'Url Rewriting non funzionerebbe di fronte ad un PostBack della pagina.