18

WebException2 つの異なる を適切に処理しようとしています。

基本的には呼び出してから処理するWebClient.DownloadFile(string address, string fileName)

私の知る限り、これまでのところ、処理する必要があるのは2つあり、両方ともWebException:

  • リモート名を解決できませんでした (つまり、サーバーにアクセスしてファイルをダウンロードするためのネットワーク接続がありません)
  • (404) File not nound (つまり、ファイルがサーバー上に存在しません)

他にもあるかもしれませんが、これが今までで最も重要だと思ったものです。

では、どちらも であるため、これを適切に処理するにはどうすればよいですか?WebException上記の各ケースを異なる方法で処理したいと考えています。

これは私がこれまでに持っているものです:

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

ご覧のとおり、メッセージをチェックして、メッセージの種類を確認していますWebException。これを行うためのより良い、またはより正確な方法があると思いますか?

4

1 に答える 1

29

このMSDNの記事に基づいて、次のように実行できます。

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

WebExceptionStatus.NameResolutionFailure表示されているエラーかどうかはわかりませんが、スローされた例外を調べて、そのエラーの原因を特定できWebExceptionStatusます。

于 2010-04-16T05:38:27.523 に答える