Handling two WebException's properly [closed]
Asked Answered
V

1

18

I am trying to handle two different WebException's properly.

Basically they are handled after calling WebClient.DownloadFile(string address, string fileName)

AFAIK, so far there are two I have to handle, both WebException's:

  • The remote name could not be resolved (i.e. No network connectivity to access server to download file)
  • (404) File not nound (i.e. the file doesn't exist on the server)

There may be more but this is what I've found most important so far.

So how should I handle this properly, as they are both WebException's but I want to handle each case above differently.

This is what I have so far:

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

As you can see I am checking the message to see what type of WebException it is. I would assume there is a better or a more precise way to do this?

Veneration answered 16/4, 2010 at 5:10 Comment(1)
Guessing the answer is along the lines of checking the exception status, as in using web exception instead, (if wEx.Status == WebExceptionStatus.Something) { //handle } (if wEx.Status == WebExceptionStatus.SomethingElse) { //handle that }Veneration
O
29

Based on this MSDN article, you could do something along the following lines:

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

I'm not certain that WebExceptionStatus.NameResolutionFailure is the error you are seeing, but you can examine the exception that is thrown and determine what the WebExceptionStatus for that error is.

Orest answered 16/4, 2010 at 5:38 Comment(1)
I also looked here: msdn.microsoft.com/en-us/library/… which shows you all possible status'. You are correct with those two status' those are the ones I got in each situation. I have decided to treat the 404 seperately and then else for any other exception status - as the others all seem to do with the connection and network connectivity which I will group together.Veneration

© 2022 - 2024 — McMap. All rights reserved.