In una mia applicazione utilizzo l’oggetto WebClient per effettuare chiamate REST ad un web service che mi restituisce un XML con il risultato.
Una particolarità è che, a parità di URL, l’XML risultante cambia (es: un metodo GetRandomProducts).
Fin qui niente di strano..tuttavia WebClient utilizza un meccanismo di cache interno in base all’indirizzo e non ci sono proprietà per disabilitare tale comportamento.
L’unica soluzione che ho trovato è passare in QueryString un parametro random (es: un GUID).
Mi sono quindi creato un extension method che qui riporto.
- public static class WebClientExtensions
- {
- public static void DownloadStringAsync(this WebClient client, Uri uri, object userToken, bool ignoreCache)
- {
- if (ignoreCache)
- {
- Uri freshAddress;
-
- if (string.IsNullOrEmpty(uri.Query))
- {
- freshAddress = new Uri(uri.AbsoluteUri + "?" + Guid.NewGuid());
- }
- else
- {
- freshAddress = new Uri(uri.AbsoluteUri + "&" + Guid.NewGuid());
- }
-
- client.DownloadStringAsync(freshAddress, userToken);
- }
- else
- {
- client.DownloadStringAsync(uri, userToken);
- }
- }
- }