10

asp.net サイトの適切なエラー処理方法は何ですか? 例?ありがとう!

4

7 に答える 7

9

他の.netプロジェクトと同様に、特定のページで発生する可能性がある場合にのみ、特定のエラータイプをキャッチするのが最善の方法だと思います。

たとえば、入力を指定したユーザーのフォーマット例外をキャッチできますが(JavaScript検証が失敗し、tryparseを使用していない場合に備えて)、常に最上位の例外のキャッチをグローバルエラーハンドラーに任せます。

     try
        {
            //Code that could error here
        }
        catch (FormatException ex)
        {
            //Code to tell user of their error
            //all other errors will be handled 
            //by the global error handler
        }

必要に応じて、ASP.Netのオープンソースelmah(エラーログモジュールとハンドラー)を使用して、このトップレベル/グローバルエラーキャッチを実行できます。

elmahを使用すると、簡単に構成できるWebインターフェイスで表示できるエラーのログを作成できます。また、さまざまなタイプのエラーをフィルタリングし、さまざまなエラータイプ用に独自のカスタムエラーページを作成することもできます。

于 2008-09-30T21:47:16.623 に答える
3

特に役立つと思われる 1 つの方法は、一般的なエラー ページを作成し、web.config の customErrors ノードで defaultRedirect をそのエラー ページに設定することです。

次に、すべての未処理の例外をログに記録するように global.asax をセットアップし、それら (未処理の例外) をいくつかのクラスの静的プロパティに配置します (静的な LastError プロパティを持つ ErrorUtil というクラスがあります)。エラー ページは、このプロパティを参照して、ユーザーに何を表示するかを決定できます。

詳細はこちら: http://www.codeproject.com/KB/aspnet/JcGlobalErrorHandling.aspx

于 2008-09-30T21:42:45.150 に答える
0

まあ、それはかなり広く開いています、それは完全にクールです。Dot Net Spiderからダウンロードできる.docという単語を参照します。これは、実際には私の小さな会社のコード標準の基礎となっています。この規格には、非常に役立つエラー処理のヒントがいくつか含まれています。

例外のそのような例の1つ(これがドキュメントにオリジナルであるか、ドキュメントに追加したかは思い出せません):「例外をキャッチして何もしない」ことは絶対にしないでください。例外を非表示にすると、例外が発生したかどうかがわかりません。プログラムですべてのエラー状態をチェックすることにより、常に例外を回避するようにしてください。

してはいけないことの例:

try
{
   ...
}
catch{}

正当な理由がない限り、非常にいたずらです。

于 2008-09-30T21:48:18.180 に答える
0

アプリケーションによって生成されるエラーのほとんどをキャッチし、ユーザーにわかりやすいメッセージを表示できることを確認する必要があります。ただし、もちろん、別のユーザーがweb.configとdefaultRedirectを使用できるため、すべてのエラーをキャッチすることはできません。エラーをログに記録するためのもう1つの非常に便利なツールはELMAHです。ELMAHは、アプリケーションによって生成されたすべてのエラーをログに記録し、非常に読みやすい方法で表示します。ELMAHをアプリケーションにプラグインするのは、web.configファイルに数行のコードを追加してアセンブリをアタッチするだけです。あなたは間違いなくELMAHを試してみるべきです。それは文字通りあなたに何時間もの苦痛を救うでしょう。

http://code.google.com/p/elmah/

于 2008-09-30T21:52:59.870 に答える
0
public string BookLesson(Customer_Info oCustomerInfo, CustLessonBook_Info oCustLessonBookInfo)
    {
        string authenticationID = string.Empty;
        int customerID = 0;
        string message = string.Empty;
        DA_Customer oDACustomer = new DA_Customer();

        using (TransactionScope scope = new TransactionScope())
        {
            if (oDACustomer.ValidateCustomerLoginName(oCustomerInfo.CustId, oCustomerInfo.CustLoginName) == "Y")
            {
                // if a new student
                if (oCustomerInfo.CustId == 0)
                {
                    oCustomerInfo.CustPassword = General.GeneratePassword(6, 8);
                    oCustomerInfo.CustPassword = new DA_InternalUser().GetPassword(oCustomerInfo.CustPassword, false);
                    authenticationID = oDACustomer.Register(oCustomerInfo, ref customerID);
                    oCustLessonBookInfo.CustId = customerID;
                }
                else // if existing student
                {
                    oCustomerInfo.UpdatedByCustomer = "Y";
                    authenticationID = oDACustomer.CustomerUpdateProfile(oCustomerInfo);
                }
                message = authenticationID;
                // insert lesson booking details
                new DA_Lesson().BookLesson(oCustLessonBookInfo);
            }

            else
            {
                message = "login exists";
            }
            scope.Complete();
            return message;
        }

    }
于 2009-11-17T09:41:30.007 に答える
0
  1. 発生する可能性のある例外について各ページ内で防御的にコーディングし、それらを適切に処理して、例外が発生するたびにユーザーを混乱させないようにします。

  2. 参照を使用して、すべての例外をログに記録します。

  3. 未処理の例外については、サポートに使用するための参照を提供する一般的なエラーページを提供します(サポートはログから詳細を識別できます)。ほとんどのユーザーは例外を理解しませんが、システムに関する情報(パスワードなど)が公開されるため、セキュリティ上のリスクが生じる可能性があるため、実際の例外を表示しないでください。

  4. すべての例外をキャッチせず、それらに対して何もしません(上記の回答のように)。これを行う正当な理由はほとんどありません。特定の例外をキャッチして意図的に実行しない場合がありますが、これは賢明に使用する必要があります。

于 2008-09-30T21:58:45.300 に答える
0

ユーザーを標準のエラーページにリダイレクトすることは必ずしも良い考えではありません。ユーザーがフォームで作業している場合、作業中のフォームからリダイレクトされたくない場合があります。例外を引き起こす可能性のあるすべてのコードをtry/catchブロック内に配置し、catchブロック内に、エラーが発生したことをユーザーに警告するアラートメッセージを出力し、フォーム入力、クエリ文字列を含むデータベースに例外を記録します。 、など。私は内部サイトを開発していますが、ほとんどのユーザーは問題が発生した場合に電話をかけてきます。公開サイトの場合は、elmahのようなものを使用することをお勧めします。

于 2008-10-01T00:46:05.070 に答える