Come sappiamo, uno dei grandi vantaggi di Blazor è la possibilità di condividere class library con le API server side. Se per esempio consideriamo il template di default in Visual Studio, la pagina FetchData e il controller WeatherForecastController dialogano scambiandosi istanze di oggetti di tipo WeatherForecast:
public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public string? Summary { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); }
Si tratta di un sistema ovviamente molto vantaggioso, perché questa classe rappresenta in pratica il contratto tra client e server, e ci consente di scrivere codice fortemente tipizzato in entrambi i layer applicativi.
Alle volte, tuttavia, potremmo avere la necessità di consumare un endpoint in cui il tipo risultante non sia noto a priori, immaginiamo per esempio un servizio che ci restituisca dati tabellari, i cui nomi dei field possono cambiare di volta in volta. In questo caso possiamo semplicemente effettuare il cast della risposta su un array di Dictionary:
private IDictionary<string, object>[]? results; protected override async Task OnInitializedAsync() { results = await Http.GetFromJsonAsync<IDictionary<string, object>[]>("GetMyData"); }
A questo punto, possiamo rappresentare questi dati in una tabella che costruiamo dinamicamente in base alle chiavi del dictionary:
@if (results == null) { <p><em>Loading...</em></p> } else if (results.Length == 0) { <p><em>No data</em></p> } else { <table class="table"> <thead> <tr> @foreach (var header in results.First().Keys) { <th>@header</th> } </tr> </thead> <tbody> @foreach (var result in results) { <tr> @foreach (var fieldName in results.Keys) { <td>@result[fieldName]</td> } </tr> } </tbody> </table> }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare Model as a Service su Microsoft Azure
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Generare token per autenicarsi sulle API di GitHub
.NET Conference Italia 2023
Usare il versioning con i controller di ASP.NET Core Web API
Miglioramenti nell'accessibilità con Angular CDK
Aggiungere interattività lato server in Blazor 8
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Sfruttare lo streaming di una chiamata Http da Blazor
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Semplificare il deployment di siti statici con Azure Static Web App
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode