1

この状況で例外を処理する方法をどのように修正しますか? 最初は、次の方法で trycatch を使用すると、アップロードが失敗したときにヘルパー クラスによってスローされた例外をキャッチできると思います。

私の目的は、「false」が返され、メッセージボックスが開き、アップロード試行からの HTML 応答から抜き出されるエラー メッセージが表示されることです。悪い習慣に頼らず、ヘルパー クラス内に GUI コードを配置することなく、これを実行しようとしています。

        try
        {
            // returns bool
            successful = UploadHelper.Upload(uploadToPath, File.ReadAllBytes(uploadFromPath), properties);
        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }

ヘルパー クラス:

    public static bool Upload(string webUrl, string documentName, byte[] bytes, Dictionary<string, object> metaInfo, out string result)
    {
        try
        {
            using (WebClient webClient = new WebClient())
            {
                //result is HTML string containing data
                result = Encoding.UTF8.GetString(webClient.UploadData(webUrl + "/_vti_bin/_vti_aut/author.dll", "POST", data.ToArray()));

                // if fails throw exception
                if (result.IndexOf("\n<p>message=successfully") < 0)
                    throw new Exception(result);
            }
        }
        catch (Exception ex)
        {
            result = ex.Message;

            // Upload failed
            return false;
        }
        // Upload succeeded
        return true;
    }

この少し似た質問により、カスタム例外でこの問題を解決できると考えるようになりました。ただし、この作成の説明を読んで、この状況を解決するためにどのように使用できるかについて混乱しました.

返されたエラー メッセージに応じてユーザーが問題を解決できる可能性があるため、とにかくカスタム例外を使用することが正当化される状況であると確信しています。とにかく、前述のガイドから書きました(簡単にするためにコード例は省略しました)。

4

1 に答える 1

5

例外のメッセージを UI に表示するだけで、catchここのブロックがメッセージを取得するだけの場合、なぜここでそれをキャッチするのでしょうか? 処理が UI にある場合は、そこで (またはその近くで) キャッチし、そのレベルでメッセージを取得して表示します。

通常、この種のケースでは例外処理を使用して、特定の例外を取得し、それらから情報を抽出して特定の方法で報告するか (以下の Charleh コメントとしてエラー メッセージを要約します)、または何らかの自動再試行ロジックを実行します。Uploadしかし、アップロードに失敗した場合に例外をスローするというメソッドには、まったく問題はありません。

于 2012-07-04T14:27:17.880 に答える