質問

私は2つの異なるものを処理しようとしています WebException適切に。

基本的に、彼らは呼び出し後に処理されます WebClient.DownloadFile(string address, string fileName)

Afaik、これまでのところ、私が処理しなければならない2つがあります。 WebException's:

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

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

それで、どちらもこれを適切に処理する必要があります。 WebException'Sしかし、私はそれぞれのケースを異なる方法で処理したいと思っています。

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

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であるかを確認しています。これを行うには、より良いまたはより正確な方法があると思いますか?

ありがとう

役に立ちましたか?

解決

に基づく この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 そのエラーはです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top