2009-04-05 10 views
11

MVCアプリケーションでグローバルエラー処理を実装しようとしています。MVCグローバルエラー処理:Application_Error not firing

Application_Errorのロジックがあり、ErrorControllerにリダイレクトされますが、機能しません。

Global.aspxの私のApplication_Errorメソッドの中にブレークポイントがあります。

例外を強制すると、ブレークポイントにヒットしません。なぜどんなアイデア?

+0

アプリケーションを非デバッグモードで実行しようとしましたか? CTR + F5 –

+0

あなたのメソッドは正しい署名を持っていますか? Application_Error(オブジェクト送信者、EventArgs e)ではなくApplication_Error()? –

+0

はweb.configにありますか? –

答えて

10

あなたは、テストのためにこの方法を試すことができます。

protected void Application_Error(object sender, EventArgs e) 
{ 
    var error = Server.GetLastError(); 
    Server.ClearError(); 
    Response.ContentType = "text/plain"; 
    Response.Write(error ?? (object) "unknown"); 
    Response.End(); 
} 

のWeb.config

<customErrors mode="Off" /> 
+0

いいえ!それは貧しいアイデアです。私はエラーをログに記録し、フレンドリーな画面をユーザに提示するために、グローバルなエラー処理が必要です。 – Dan

+0

あなたのリンクは私の質問にはあまり関係ありません。 – Dan

+2

@ダン、あなたは私のポイントを得ていない。デバッガはあなたのApplication_Errorメソッドにステップインできません。デバッガなしで自分のコードを使用すると、それは動作することがわかります。ところで、あなたはあなたを助けるためにどんな欲望を破ります。 –

0

私は確かにあなたを伝えることはできません何'間違っていますが、私は何かをチェックすることを考えることができます...まず、VSが例外を破っているのですか?あなたがデバッガにいる場合、これは私が思うデフォルトです。ブレークポイントでコードに到達するまでF5キーを押すだけです。また、Application_Errorに到達する前に例外を処理しないでください。

もう1つのことはweb.configのCustomErrorsモードです。これはOffに設定されています。

+0

いいえ、別の場所では処理しません。 – Dan

+0

ありがとう、私のポストに別の考えを加えました。 –

2

これを処理するより良い方法は、HandleErrorAttributeを使用してコントローラ(おそらくベースコントローラ)を装飾することだと思います。これにより、この属性を拡張し、レンダリングされるビューを変更するなど、ニーズに合わせて変更することで、さまざまなエラーの異なるコントローラでエラーを処理したり、ロギングを行うことができます。この属性を使用すると、MVCの標準フィルタ処理が使用され、Application_Errorを使用する場合と同じように、レスポンスに直接書き込むのではなく、ビューを使用してページが構築されます。

+2

HandleError属性を使用しても、コントローラー外で発生したエラー(たとえば、Global.asax.csのRegisterRoutesなど)はわかりません。 –

+2

@Michael - フレームワークはそこの属性しか認識しないので、コントローラーまたはコントローラーメソッドにのみ適用されます。実際に私はこれが問題であるとは思わない。私にとっては、アクションの外で実行される唯一のコードは起動時に実行されます。とにかくカスタムHandleError属性を持つELMAHを使用していますので、両方のベースがカバーされます。 – tvanfosson

+0

@tvanfossonもajax呼び出しと同じです。あなたが持っていれば、global.asax application_errorに直進します。いくつかの研究とテストの後、私は3つのプロングソリューションを決めました。 RegisterGlobalFiltersを使用して A.カスタム属性は、コントローラ B.すべてのメッセージをキャプチャし C. JavaScriptをカスタムのエラー処理を有効にするweb.configファイルを更新する、のいずれかのAjaxのステータスコードからモデルやヘルパーメソッドまたは直接を使用して装飾されていませんモデルとAjaxがエラーになるようにjavaScript経由でエラーページにリダイレクトする – Clarence