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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare una container image come runner di GitHub Actions
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Aggiungere interattività lato server in Blazor 8
Usare lo spread operator con i collection initializer in C#
Utilizzare QuickGrid di Blazor con Entity Framework
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Creare alias per tipi generici e tuple in C#
Migliorare l'organizzazione delle risorse con Azure Policy
Generare un hash con SHA-3 in .NET
Gestire domini wildcard in Azure Container Apps
Testare l'invio dei messaggi con Event Hubs Data Explorer
Migrare una service connection a workload identity federation in Azure DevOps
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online