MVCアプリケーションでグローバルエラー処理を実装しようとしています。MVCグローバルエラー処理:Application_Error not firing
Application_Error
のロジックがあり、ErrorController
にリダイレクトされますが、機能しません。
Global.aspx
の私のApplication_Error
メソッドの中にブレークポイントがあります。
例外を強制すると、ブレークポイントにヒットしません。なぜどんなアイデア?
MVCアプリケーションでグローバルエラー処理を実装しようとしています。MVCグローバルエラー処理:Application_Error not firing
Application_Error
のロジックがあり、ErrorController
にリダイレクトされますが、機能しません。
Global.aspx
の私のApplication_Error
メソッドの中にブレークポイントがあります。
例外を強制すると、ブレークポイントにヒットしません。なぜどんなアイデア?
あなたは、テストのためにこの方法を試すことができます。
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" />
私は確かにあなたを伝えることはできません何'間違っていますが、私は何かをチェックすることを考えることができます...まず、VSが例外を破っているのですか?あなたがデバッガにいる場合、これは私が思うデフォルトです。ブレークポイントでコードに到達するまでF5キーを押すだけです。また、Application_Error
に到達する前に例外を処理しないでください。
もう1つのことはweb.configのCustomErrors
モードです。これはOff
に設定されています。
いいえ、別の場所では処理しません。 – Dan
ありがとう、私のポストに別の考えを加えました。 –
これを処理するより良い方法は、HandleErrorAttributeを使用してコントローラ(おそらくベースコントローラ)を装飾することだと思います。これにより、この属性を拡張し、レンダリングされるビューを変更するなど、ニーズに合わせて変更することで、さまざまなエラーの異なるコントローラでエラーを処理したり、ロギングを行うことができます。この属性を使用すると、MVCの標準フィルタ処理が使用され、Application_Errorを使用する場合と同じように、レスポンスに直接書き込むのではなく、ビューを使用してページが構築されます。
HandleError属性を使用しても、コントローラー外で発生したエラー(たとえば、Global.asax.csのRegisterRoutesなど)はわかりません。 –
@Michael - フレームワークはそこの属性しか認識しないので、コントローラーまたはコントローラーメソッドにのみ適用されます。実際に私はこれが問題であるとは思わない。私にとっては、アクションの外で実行される唯一のコードは起動時に実行されます。とにかくカスタムHandleError属性を持つELMAHを使用していますので、両方のベースがカバーされます。 – tvanfosson
@tvanfossonもajax呼び出しと同じです。あなたが持っていれば、global.asax application_errorに直進します。いくつかの研究とテストの後、私は3つのプロングソリューションを決めました。 RegisterGlobalFiltersを使用して A.カスタム属性は、コントローラ B.すべてのメッセージをキャプチャし C. JavaScriptをカスタムのエラー処理を有効にするweb.configファイルを更新する、のいずれかのAjaxのステータスコードからモデルやヘルパーメソッドまたは直接を使用して装飾されていませんモデルとAjaxがエラーになるようにjavaScript経由でエラーページにリダイレクトする – Clarence
アプリケーションを非デバッグモードで実行しようとしましたか? CTR + F5 –
あなたのメソッドは正しい署名を持っていますか? Application_Error(オブジェクト送信者、EventArgs e)ではなくApplication_Error()? –