Frage

Ich versuche, zwei verschiedene WebException die richtig zu handhaben.

Im Grunde werden sie behandelt, nachdem WebClient.DownloadFile(string address, string fileName) Aufruf

AFAIK, bisher gibt es zwei, die ich behandeln müssen, die beide WebException suchen:

  • Der Remote-Name nicht aufgelöst werden kann (das heißt keine Netzwerkverbindung zum Zugangsserver zur Download-Datei)
  • (404) Datei nicht nound (das heißt die Datei nicht auf dem Server vorhanden ist)

Es kann mehr sein, aber das ist, was ich am wichtigsten gefunden habe, so weit.

Wie soll ich das richtig handhaben, da sie beide WebException ist, aber ich will oben anders jeden Fall behandeln.

Das ist, was ich habe, so weit:

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
        }
    }
}

Wie man sehen kann ich die Meldung bin Überprüfung, um zu sehen, was Art von WebException es ist. Ich würde davon ausgehen, gibt es ein besseres oder eine genauere Art und Weise, dies zu tun?

Danke

War es hilfreich?

Lösung

Basierend auf diesem MSDN-Artikel , Sie könnte etwas entlang der folgenden Zeilen tun:

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
    }
}

Ich bin nicht sicher, dass WebExceptionStatus.NameResolutionFailure ist der Fehler, den Sie sehen, Sie können jedoch die Ausnahme untersuchen, die ausgelöst wird und bestimmen, was der WebExceptionStatus für diesen Fehler ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top