Nel progetto che sto realizzando (un progetto WinForms
.NET) in sede di test ho riscontrato un problema, e cioè che il download di un
file via http hostato da IIS non funziona se IIS non è configurato per l'accesso
anonimo.
Il codice originario usato da me era:
try
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(stringRequest);
webRequest.Credentials = CredentialCache.DefaultCredentials; // Diritti di accesso di default
webRequest.Proxy = WebProxy.GetDefaultProxy(); // Proxy di default
using(HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
{
using(Stream instream = webResponse.GetResponseStream())
{
// Download
del file
}
}
}
catch(WebException ex)
{
Debug.WriteLine(ex.ToString();
}
catch(Exception ex)
{
Debug.WriteLine(ex.ToString();
}
La cosa insidiosa è che questo codice non genera alcuna eccezione:
semplicemente il file viene creato ma ha grandezza 0k.
Cercando nella documentazione MSDN ho trovato come configurare l'oggetto Credentials di WebRequest usando un CredentialCache customizzato; il codice di esempio
preso dalla documentazione MSDN continua però a dare lo stesso
problema:
CredentialCache credentials = new CredentialCache();
NetworkCredential nc = new NetworkCredential("username", "password");
credentials.Add(new Uri("http://localhost/"), "Basic", nc);
credentials.Add(new Uri("http://localhost/"), "Digest", nc);
webRequest.Credentials = credentials;
Ho risolto modificando il codice precedente inserendo solo schema di
autenticazione NTFS(ed eliminando "Basic" e "Digest" per motivi di sicurezza):
CredentialCache credentials = new CredentialCache();
NetworkCredential nc = new NetworkCredential("username", "password");
cred.Add(new Uri("http://localhost/"), "NTLM", nc);
webRequest.Credentials = credentials;
In questo modo il download viene effettuato
correttamente.
Magari a qualcuno risparmierà mezz'ora di tempo...
powered by IMHO 1.2