2

私のカスタムOrchardモジュールでは、ログイン中にカスタムFtpExceptionをスローするコントローラーアクション内にいくつかのftpクライアントコードを記述しました。ログインコードをtry-catchでラップし、エラーが発生した場合に通知メッセージをビューに送り返しています。問題は、エラーがまだ発生していて、標準の「おっと。何か問題が発生しました...ごめんなさい」オーチャードエラーメッセージが表示されていることです。これが私がラップしているコードです:

        try
        {
            ftpClient.Login();
            ftpClient.Upload(fileName);
        }
        catch (FtpException ex)
        {
            services.Notifier.Error(T("There was an error sending the file - {0}.", ex.Message));
            return RedirectToAction("Edit", "Project");
        }
        finally
        {
            ftpClient.Close();
        }

        services.Notifier.Information(T("File uploaded successfully."));
        return RedirectToAction("Edit", "Project");

オーチャードログを見ると、内からFTP例外がスローされていることがわかりますftpClient.Login()。catchブロックのコードが実行されているので、例外が処理されていることがわかります。問題は、未処理の例外動作がまだOrchardによって表示されていることです。RedirectToActionが起動するように、例外がバブリングするのを防ぐにはどうすればよいですか?

4

1 に答える 1

2

コメントで説明されているように、次のことが起こっている可能性があります。

  1. 実行は、に入り、tryへの呼び出しにLogin()到達し、例外をスローします。
  2. 実行はcatchブロックにジャンプし、catchブロックはオブジェクトを呼び出そうとClose()しますftpClient
  3. の正確なタイプはわかりませんが、(そもそも)必ずしも開かれていない可能性のあるインスタンスをftpClient呼び出すと、別の例外がスローされることは理にかなっています。これは、Orchardの例外ハンドラーによってキャッチされているものです。 。Close()Login

IsOpenまず、FTPクライアントクラスにある種のプロパティを探す(または追加する)かLogin、ログインの失敗と別の失敗を区別できるように、呼び出しを別のtry/catchでラップすることから始めます。または、ソースにアクセスできるLogin場合、失敗すると別のタイプの例外をスローする可能性があります。

于 2012-12-17T11:58:06.587 に答える