URL Routing in ASP.NET 4.0

Giorgio Borelli

Tecnica di riscrittura degli url tramite il routing di asp.net 4.0L'url di un indirizzo web deve essere il più semplice e comprensibile possibile, ed al suo interno deve contenere possibilmente quelle parole che già ne fanno non soltanto capire il contenuto della pagina di destinazione, ma anche consentire una memorizzazione più semplice.

Questo è vero non soltanto in un'ottica SEO (Search Engine Optimization), dove url privi dell'estensione della pagina e di codici e identificativi in querystring per pagine dinamiche consente una miglioria in termini dei risultati di ricerca da parte dei motori, ma anche per gli utenti navigatori che più facilmente ricordano ed identificano il contenuto dell'indirizzo web.

Per far ciò il .NET framework giunto alla sua versione 4.0 ha migliorato e semplificato la tecnica dell'URL Routing (introdotta con il .NET 3.5 SP1), che consente con grande semplicità la scrittura di url molto più user friendly. Implementarla costa davvero poca fatica, andiamo a scoprire come fare.

L'URL Routing è una tecnica di sviluppo per la "riscrittura" degli url, questa è praticamente incorporata in ASP.NET MVC (model-View-Controller), ma è implementabile con facilità anche nelle WebForm di ASP.NET, noi cercheremo di concentrarci e di spiegare come farlo per quest'ultima tecnologia.

Quando con il nostro browser (il client) effettuiamo una richiesta per una pagina aspx, il web server IIS normalmente processa la pagina aspx e risponde così al client inviandogli il codice HTML generato. Con l'URL Routing questo comportamento può essere variato, l'url non viene più associato ad una pagina, ma ad un controller (una classe) che in base all'url richiesto, lo mappa con uno più user friendly (da noi specificato) e si fa carico lui "d'interrogare" l'effetiva pagina, nascondenone all'utente il nome fisico ed eventuali parametri in querystring. In altre parole, il controller, trasforma la mappatura per la richiesta del file fisico (la pagina) in un path virtuale, mostrandoci un indirizzo più semplice e significativo del contenuto richiesto.

Grazie all'url routing, ad esempio saremo in grado di trasformare un indirizzo del tipo:

http://www.miosito.com/NewsDetail.aspx?IdNews=5

in qualcosa del genere

http://www.website.com/news/dettaglio/5

Elenchiamo i passi per capire come fare:

1) Aggiungete al vostro progetto web in Visual Studio, il file Global.asax (a meno che già non lo sia)

2) aprite il Global.asax e aggiungete la direttiva per il namespace del routing, in questo modo:

using System.Web.Routing;

se non state usando il codebehind (file .cs in C#) pe il global.asax ma il file unico l'import del namespace si fà così:

<%@ Import Namespace="System.Web.Routing" %>

dopodichè aggiungete nell'Application_Start la chiamata ad una funzione per registrare gli url, del tipo:

void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

a questo punto definiamo il metodo RegisterRoutes, così:

public static void RegisterRoutes(RouteCollection routeCollection)
{
    RouteTable.Routes.Add("NewsRoute", new Route("news/dettaglio/{id}", new PageRouteHandler("~/NewsDetail.aspx")));
}

la route che abbiamo definito all'interno del metodo fà sì che ad un indirizzo virtuale "~/news/dettaglio/5" o completo http://www.miosito.com/news/dettaglio/5 venga in realtà girato alla pagina NewsDetail.aspx. Ovviamente possiamo aggiungere quanti routes ci servono alla RouteTable e mapparli alle rispettive pagine.

3) Adesso non ci resta che gestire il codice all'interno della pagina aspx fisica, ad es. per un eventuale DataBind, al Page_Load quindi possiamo scrivere così:

protected void Page_Load(object sender, EventArgs e)
{
    int id = Convert.ToInt16(Page.RouteData.Values["idNews"]);
    News newsDet = NewsManager.DetailNews(id);
    ...
}

come vedete è stato semplicissimo come prelevare il valore col classico Request.QueryString["Id"].

Bene questo è quanto, non serve altro, desidero solo ricordarvi che nella costruzione dei link all'interno delle pagine dovete specificarli così per come devono essere mappati dalla route, quindi del tipo:

HyperLinkNews.NavigateUrl = String.Concat("~/news/dettaglio/{0}", newsDet.IdNews);

Potete gestire come meglio credete i vostri URL con l'URL Routing di ASP.NET, come avete visto è molto semplice, e potete fare molto di più di quanto mostrato nell'esempio, tanto per dirne una nella registrazione dei vostri url potete usare vincoli e parametri, nonchè definire regular expression per indirizzi particolari; ad es. costruire  mapping di url che oltre all'ID prevedano la costruzione dinamica tramite il nome della news o del prodotto che sia, partendo da questo esempio è davvero semplice.

Desidero chiudere questo articolo, sottolineando che l'URL Routing di ASP.NET non và confuso con l'URL Rewriting (.NET 2.0) che non fà altro che una "brutale" riscrittura degli url.

Chiunque voglia aggiungere qualcosa o chiedere ulteriori chiarimenti su come funziona "L'URL Routing in ASP.NET 4.0", può farlo tramite i commenti, ogni vostro contributo alla discussione sarà gradito e contribuirà ad un approfondimento dell'argomento per una crescita comune.

Categorie: ASP.NET | Seo | Web

Tags: , , ,

Commenti (2) -

Grazie mi è stato molto utile. Trovo anch'io che sia davvero molto più semplice dell'url rewrite.
Ti sarei grato se avessi voglia di pubblicare un approfondimento con le regex.

Rispondi

Prego Enzo, io però non ho detto che l'url routing è necessariamente più semplice dell'url rewrite, ma che funzionano in maniera diversa. Anche l'url rewrite conoscendolo non è poi difficile magari qui abbiamo più controllo a livello di codice.
Sicuramente l'uso delle regex ci consente di coprire casistiche molto più estese e complesse di quelle dell'esempio mostrato, sarebbe riduttivo risponderti qui, magari prenderò spunto dal tuo commento per farne un ulteriore articolo.

Ciao e grazie per il tuo intervento.


Rispondi

Aggiungi Commento

biuquote
Loading