In ASP.NET Core abbiamo molteplici opzioni per leggere i dati in querystring, per esempio esponendoli come parametri di un controller e far sì che il routing li popoli automaticamente.
Purtroppo in Blazor l'infrastruttura di Routing è molto più limitata e non abbiamo invece alcun sistema out-of-the-box. Pertanto l'unica opzione è costruirsi una soluzione personalizzata, e il modo più immediato è quello di avvalersi del seguente package:
Install-Package Microsoft.AspNetCore.WebUtilities
Immaginiamo di voler inizializzare il Counter del template di default di Blazor a un valore fornito in querystring. Il procedimento si basa sull'utilizzo di NavigationManager per recuperare il path corrente, e poi della classe QueryHelpers per effettuare il parsing della querystring. Possiamo riscrivere la pagina Counter.razor in questo modo:
@page "/counter" @inject NavigationManager NavigationManager <h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } protected override void OnInitialized() { base.OnInitialized(); var currentUrl = new Uri(this.NavigationManager.Uri); var query = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(currentUrl.Query); if (query.ContainsKey("start")) { currentCount = int.Parse(query["start"]); } } }
Come possiamo notare, abbiamo innanzitutto iniettato l'istanza di NavigationManager ed poi effettuato l'override del metodo OnInitialized, dove come prima cosa andiamo a recuperare l'Uri corrente. Nel passo successivo, grazie a QueryHelpers.ParseQuery, possiamo recuperare il dictionary di tutte le coppie chiave-valore presenti in querystring.
A questo punto non dobbiamo far altro che implementare la nostra logica di inizializzazione, impostando il valore di currentCount a quello recuperato, se presente.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
.NET Conference Italia 2023
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Installare le Web App site extension tramite una pipeline di Azure DevOps
Utilizzare gli snapshot con Azure File shares
Implementare il throttling in ASP.NET Core
Evitare la script injection nelle GitHub Actions
Miglioramenti nell'accessibilità con Angular CDK
Reactive form tipizzati con modellazione del FormBuilder in Angular
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL