Per .NET Core le cose sono un po 'più coinvolte. Un GZipStream
è necessario in quanto non v'è una proprietà (al momento di scrivere) per AutomaticCompression
Si consideri il seguente esempio GET
:
var req = WebRequest.CreateHttp(uri);
/*
* Headers
*/
req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
/*
* Execute
*/
try
{
using (var resp = await req.GetResponseAsync())
{
using (var str = resp.GetResponseStream())
using (var gsr = new GZipStream(str, CompressionMode.Decompress))
using (var sr = new StreamReader(gsr))
{
string s = await sr.ReadToEndAsync();
}
}
}
catch (WebException ex)
{
using (HttpWebResponse response = (HttpWebResponse)ex.Response)
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
string respStr = sr.ReadToEnd();
int statusCode = (int)response.StatusCode;
string errorMsh = $"Request ({url}) failed ({statusCode}) on, with error: {respStr}";
}
}
}
Credo Rick Strahl deve essere sbagliato. Hai provato tu stesso? – Keltex
grazie - solo cercando di capire le cose, puoi dirmi se è corretto? (a) se non si aggiunge questa riga "AcceptEncoding" allora - se si scarica un file non compresso => funziona FINE - se si scarica un file compresso => PROBLEMA (verrà scaricato il file ma apparirà corrotto, come non è stato decompresso) (b) se si aggiunge questa riga "AcceptEncoding" allora: - se si scarica un file non compresso => funziona ancora FINE - se si scarica un file compresso => funziona correttamente (sarà non compresso) È giusto? – Greg
@Greg Nessuna delle opzioni. La seconda riga non riguarda il download di file che potrebbero essere già compressi (ad es. File zip), ma il download di risorse Web che possono essere compresse su richiesta (ad esempio file html). Se non si inserisce la seconda riga, un server web ben educato non invierà affatto file compressi. Se il server web ha la capacità di comprimere i file, lo farà solo se metti la seconda linea. –