Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handling two WebException's properly

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?

like image 358
baron Avatar asked Apr 16 '10 05:04

baron


People also ask

Where should I use try-catch in C#?

try – A try block is used to encapsulate a region of code. If any code throws an exception within that try block, the exception will be handled by the corresponding catch. catch – When an exception occurs, the Catch block of code is executed. This is where you are able to handle the exception, log it, or ignore it.

Why we use try and catch in C#?

The try-catch statement consists of a try block followed by one or more catch clauses, which specify handlers for different exceptions. When an exception is thrown, the common language runtime (CLR) looks for the catch statement that handles this exception.


1 Answers

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.

like image 149
Zach Johnson Avatar answered Oct 10 '22 23:10

Zach Johnson