Utilizzare l'URL routing con le Web Forms di ASP.NET 4.0

di Marco De Sanctis, in ASP.NET 4.0,

ASP.NET 4.0 introduce una vera e propria rivoluzione nella gestione del routing, rendendone l'utilizzo assolutamente immediato anche nell'ambito di un'applicazione Web Forms. Grazie alla nuova classe PageRouteHandler, infatti, dotare i nostri siti web di URL più comprensibili richiede solo la scrittura di poche righe di codice.

Configurazione dell'URL routing in Web Forms

Analogamente a quanto accade in ASP.NET MVC, la configurazione del routing in Web Forms avviene nel Global.asax, e più precisamente all'interno del metodo Application_Start, aggiungendo alla RouteTable dell'applicazione uno o più routes, come nell'esempio seguente:

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

private void configureRoutes(RouteCollection routes)
{
  routes.MapPageRoute(
    "customers", "customers/", "~/CustomersList.aspx");
  routes.MapPageRoute(
    "customers-id", "customers/{id}", "~/CustomerDetail.aspx");
}

Nel nostro caso, abbiamo configurato due route, identificate da un nome, un pattern e l'indirizzo di una pagina ASP.NET che dovrà prendere in carico la richiesta. In particolare:

  • customers risponde ad un indirizzo del tipo localhost/customers e visualizza la pagina CustomersList.aspx;
  • customers-id introduce invece il parametro addizionale id, attivandosi in corrispondenza di un URL del tipo localhost/customers/35 e rimandando alla pagina CustomerDetail.aspx per visualizzare i dettagli di un determinato cliente.

Il valore del parametro può eventualmente essere utilizzato anche per identificare la pagina .aspx che dovrà rispondere alla richiesta, come nel caso seguente:

routes.MapPageRoute(
  "static-pages", "pages/{pagename}", "~/{pagename}.aspx");

Gestione dei dati di routing

Nella maggior parte dei casi, una route ammette nel pattern dell'URL un parametro, come avviene ad esempio nel caso di customer-id che utilizza il placeholder {id} per indicare la posizione in cui deve trovarsi l'identificativo del cliente di cui vogliamo mostrare i dettagli. ASP.NET 4.0 ci mette a disposizione diversi strumenti per recuperare questa informazione dalla pagina CustomerDetail.aspx, a seconda che dobbiamo accedervi da code-behind, markup o da un oggetto DataSource.

In particolare, da code-behind, possiamo sfruttare la proprietà RouteData della classe Page come nell'esempio seguente:

protected void Page_Load(object sender, EventArgs e)
{
  var customerId = this.RouteData.Values["id"];
}

Grazie al tag RouteValue, lo stesso dato può essere reperito a livello di markup in questo modo:

<asp:Literal runat="server" Text="<%$RouteValue:id %>" />

Se invece la nostra pagina basa la sua logica su un oggetto DataSource, la nuova classe RouteParameter permette di integrare in maniera trasparente le funzionalità di routing:

<asp:EntityDataSource ...>
  <WhereParameters>
    <asp:RouteParameter Name="CustomerID" <strong>RouteKey="id"</strong> />
  </WhereParameters>
</asp:EntityDataSource>

Generazione di indirizzi a runtime

Il supporto all'URL routing in ASP.NET 4.0 non si limita solo al parsing dell'indirizzo della richiesta e al suo instradamento verso una specifica risorsa, ma ci consente anche di generare gli indirizzi a partire dal nome della route e dai valori di eventuali parametri. Questa funzionalità è estremamente utile perché ci permette di realizzare link senza la necessità di cablare l'URL nel codice, così che esso venga automaticamente adeguato se per una qualche ragione modifichiamo la configurazione delle route.

All'interno del markup delle pagine possiamo sfruttare il nuovo tag RouteUrl:

<%-- Route "customers" senza parametri --%>
<a href="<%$RouteUrl:customers %>">Elenco clienti</a>

<%-- Route "static-pages", il cui parametro "pagename" vale "about" --%>
<a href="<%$RouteUrl:static-pages, pagename=about %>">Chi siamo</a>

Da code behind, invece, il metodo da utilizzare è GetPageUrl, esposto dalla classe Control. Ad esempio:

string customerUrl = 
  Page.GetRouteUrl("customers-id", new { id="36" });

Anche il redirect è integrato con le funzionalità di routing, grazie ai metodi RedirectToRoute e RedirectToRoutePermanent:

this.Response.RedirectToRoute("customers-id", new { id = 36 });

Conclusioni

Con l'introduzione della classe PageRouteHandler in ASP.NET 4.0, configurare le nostre applicazioni affinché possano sfruttare le funzionalità di routing è divenuto assolutamente immediato. Anche i passi successivi, che coinvolgono sia la generazione degli URL che il recupero dei parametri di routing sono resi semplici grazie ai nuovi tag per il markup, alla classe RouteParameter e alle API esposte da Page e Control.
In conclusione, in ASP.NET 4.0 il supporto a URL Routing, anche nel caso di applicazioni Web Forms, può dirsi finalmente completo e a 360 gradi.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi