UrlRewriting con ASP.NET 1.1

Sfortunatamente non so ancora sviluppando software reale sul nuovo framework, quindi eccomi a postare ancora qualcosa sul FW 1.1

UrlRewriting, tecnica essenziale per rendere più facilmente digeribili gli url del proprio sito ai motori di ricerca che, per qualche motivo, preferiscono www.mysite.com/2005/12/12/3456/index.aspx al più comune www.mysite.com/index.aspx?y=2005&m=12&d=12&transId=3456

Con ASP.NET ci sono sostanzialmente 4 metodi per farlo:

  • Filtro ISAPI
  • HTTP Handler
  • HTTP Module
  • metodo Begin_Request del Global.asax

Non faccio ora una trattazione di quele sia il metodo migliore in base alla esigenze, ne sulle differenza tra handler e module. Per un'articolo più dettagliato ed esaustivo vi rimando all'articolo di MSDN: URL Rewriting in ASP.NET.

Io vi do giusto due linee guida per fare velocemente, in situazioni senza autenticazione, un modulo per l'URL Rewriting.

  1. Scrivere una classe che implementi IHttpModule
  2. Implementare i due metodi Init e Dispose
  3. Nel metodo Init registrare un'event handler sull'evento della HTTPApplication al quale ci si vuole "attaccare" (nel mio caso mi collego banalmente alla BeginRequest)
  4. Scrivere nell'event handler le proprie regole di rewriting, e alla fine chiamare il metodo Context.RewritePath(path, pathInfo, queryString)
  5. Registrare il modulo nel web.config

Qui una parte del codice che gestisce l'operazione di rewriting (ho omesso la mia regola di rewriting perchè troppo specifica)

    public class UrlRewriter: IHttpModule
    {
        
public UrlRewriter()
        {
        }

        
public void Init(HttpApplication app) 
        {
            app.BeginRequest+=
new EventHandler(app_BeginRequest);
        }

        
public void Dispose() 
        {
        }

        
private void app_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication app = (HttpApplication) sender;
            
            
// Qui ci va le regola di rewriting
            // Potrebbe essere complessa come leggere l'url, cercare in un DB
            // il titolo del post, recuperarne l'id
            // o facile come prendere la directory numerica e salvarne
            // il valore nel context
            // nel mio caso prende url del tipo
            // www.mysite.com/145/default.aspx, tolgo la cartella numerica,
            // e la salvo nel context per poi usarla nella pagine
            
            
app.Context.Items.Add("idRivista",idRivista);
                
string queryString="";
            
if(!app.Context.Request.Url.Query.Equals(""))
                queryString=app.Context.Request.Url.Query.Substring(1);
            app.Context.RewritePath("~/"+fileName,String.Empty,queryString);
        }
    
    }

Approfondimenti ulteriori:

HTTP Handlers and HTTP Modules in ASP.NET
URL Rewriting with ASP.NET (su Codeproject)

powered by IMHO 1.3

posted @ Tuesday, January 10, 2006 4:56 PM

Print

Comments on this entry:

# re: UrlRewriting con ASP.NET 1.1

Left by Simone Chiaretta at 1/11/2006 9:24 AM
Gravatar
In realtà ho 3-4 post che sto cercando di "retrofactare" e trasformarli in articoli/tips... ho già parlato a Marco di questo...

appena ho tempo...
Comments have been closed on this topic.
«September»
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345