In applicazioni dinamiche, è molto frequente utilizzare parametri inseriti in QueryString, essendo il metodo più semplice per caricare informazioni generare pagine per ogni specifica richiesta.
Molte volte però tendiamo a evitare l’uso di questa tecnica a causa degli URL poco comprensibili e non proprio SEO Friendly che si generano.
Per permettere quindi all’utente di capire più facilmente cosa contiene la pagina che sta visualizzando e per favorire anche una migliore indicizzazione da parte dei motori di ricerca, utilizzando tecniche di SEO (Search Engine Optimizazion), possiamo utilizzare un tecnica chiamata URL rewriting, che solitamente consiste nel riscrivere l’indirizzo richiesto dall’utente mappandolo su un altro indirizzo in modo trasparente all’utente.
Con ASP.NET 4.5 possiamo fare questo in modo molto semplice utilizzando tramite la sezione system.web/urlMapping:
Purtroppo però questa sezione è abbastanza limitata e non permette scenari più complessi, come per esempio dove sono richieste la validazione dei valori predefiniti oppure l’uso di HttpHandler particolari.
Per facilitare questi scenari, ASP.NET 4.5 dispone di un modulo specifico, URL Routing, che permette principalmente l’instradamento delle richieste, ma in maniera più evoluta rispetto all’URL rewriting, infatti non si limita a riscrivere l’indirizzo ma reimposta l’HttpHandler che prende in carico la richiesta.
il modulo intercetta tutte le richieste ed utilizza una tabella, accessibile tramite la proprietà statica RouteTable.Routes, per ottenere la RouteData per ognuno delle definizioni. Quando si utilizza l’URL Routing la definizione della tabella può essere creata o modificata in qualsiasi momento ma è consigliabile farlo all’avvio dell’applicazione, così da rendere operativi fin da subito tutti gli instradamenti.
Bisogna specificare una coppia formata dal nome e dalla classe astratta RoouteBase che nella sua unica implementazione, Route, ammetta un Url e un oggetto di tipo IRouteHandler:
void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add("producttiRoute", new Route(prodotti/{IdProdotto}", new PageRouteHandler("~/prodotti.aspx"))); }
Come vediamo dall’esempio precedente le parentesi graffe le utilizziamo per definire dei segnaposto nominali, che che vengono passati poi al gestore come parametri. Ogni segnaposto deve essere necessariamente separato dall’altro da una costante, cioè da un qualsiasi carattere valido per gli URI.
Un percorso come “prodotti/{azione} {IdProdotto}” non è valido mentre lo è “prodotti/{azione} – {IdProdotto}”.
A presto per il prossimo articolo sul URL Routing di ASP:NET 4.5.