Domanda

Sto cercando di gestire due diversi WebException di correttamente.

In sostanza sono gestite dopo aver chiamato WebClient.DownloadFile(string address, string fileName)

Per quanto ne so, finora non ci sono due che devo gestire, sia di WebException:

  • Il nome a distanza non poteva essere risolto (vale a dire la connettività di rete No al server di accesso per il download di file)
  • (404) del file non nound (vale a dire il file non esiste sul server)

Non ci può essere di più, ma questo è quello che ho trovato più importante finora.

Così come dovrei gestire questo correttamente, in quanto sono entrambi di WebException ma voglio gestire ogni caso di cui sopra in modo diverso.

Questo è quello che ho finora:

try
{
    using (var client = new WebClient())
    {
        client.DownloadFile("...");
    }
}
catch(InvalidOperationException ioEx)
{
    if (ioEx is WebException)
    {
        if (ioEx.Message.Contains("404")
        {
            //handle 404
        }
        if (ioEx.Message.Contains("remote name could not")
        {
            //handle file doesn't exist
        }
    }
}

Come potete vedere sto controllando il messaggio per vedere che tipo di WebException è. Vorrei assumere v'è un migliore o un modo più preciso per fare questo?

Grazie

È stato utile?

Soluzione

In base a questo articolo MSDN , si potrebbe fare qualcosa secondo le seguenti linee:

try
{
    // try to download file here
}
catch (WebException ex)
{
    if (ex.Status == WebExceptionStatus.ProtocolError)
    {
        if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
        {
            // handle the 404 here
        }
    }
    else if (ex.Status == WebExceptionStatus.NameResolutionFailure)
    {
        // handle name resolution failure
    }
}

Non sono certo che WebExceptionStatus.NameResolutionFailure è l'errore che state vedendo, ma è possibile esaminare l'eccezione che viene generata e determinare ciò che il WebExceptionStatus per questo errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top