Molto spesso le nostre applicazioni si trovano ad interagire con degli endpoint HTTP che, se interrogati correttamente, restituiscono i dati che ci interessano sotto forma di JSON. In scenari come questi, il codice che scriviamo è più o meno sempre lo stesso, ovvero:
- Richiesta http;
- Controllo dello status code;
- Lettura della response;
- Conversione del json da semplice stringa ad istanza di un oggetto.
Tralasciando i primi tre step del processo, possiamo affermare che la conversione del JSON da stringa ad una effettiva istanza di classe è l'operazione più tediosa di tutte. Vediamo come possiamo semplificarci la vita tramite un semplice script.
public static class HttpContentExtension
{
public static async Task<T> ReadAs<T>(this IHttpContent Context)
{
var content = await Context.ReadAsStringAsync();
return JObject.Parse(content).ToObject<T>();
}
}Lo script sopra riportato aggiunge un extension method alla proprietà Content di tipo IHttpContent contenuta nell'oggetto HttpResponseMessage che, sfruttando la libreria JSON.NET, restituisce una versione tipizzata del body della response http. Ecco riportato un esempio del suo utilizzo.
private async void MakeHttpCall(object sender, RoutedEventArgs e)
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(new Uri("http://api.myendpoint.com/GetOrders"));
response.EnsureSuccessStatusCode();
List<Orders> result = await response.Content.ReadAs<List<Orders>>();
}Come possiamo vedere, utilizziamo i generics per rendere dinamico il nostro metodo. E' chiaro che l'utilizzo di questo accorgimento ci risparmia semplicemente qualche riga di codice, ma permette di rendere più flessibile la nostra logica di accesso ai dati, soprattutto se wrappiamo all'interno di un altro metodo tutte le eventuali chiamate HTTP che effettueremo.
Attenzione: questo particolare metodo funziona con l'HttpClient contenuto all'interno del namespace Windows.Web.Http, ovvero quello incluso di default all'interno di WinRT.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Introduzione ai web component HTML
Analizzare il contenuto di una issue con GitHub Models e AI
Abilitare il rolling update su Azure Functions flex consumption
Keynote .NET Conference Italia 2025
Escludere alcuni file da GitHub Copilot
Impostare automaticamente l'altezza del font tramite CSS
Integrare LLM alle nostre applicazioni in .NET con MCP
Loggare le query più lente con Entity Framework
DevSecOps per .NET: dalla teoria alla pratica
Fornire parametri ad un Web component HTML
Integrare un servizio esterno con .NET Aspire
Montare Azure Blob Storage su Linux con BlobFuse2
I più letti di oggi
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Sfruttare una CDN con i bundle di ASP.NET


