2011-10-26 3 views
3

私はAJAX呼び出しを行い、JSON結果を返す予定のASP.NET MVC 3アプリケーションを持っています。私はエラーを記録するためにELMAHを使用しています。テスト中に予期せぬエラーが発生しました。 ELMAHはエラーをログに記録しましたが、クライアント側のスクリプトは結果が適切なJSONではないため現時点ではありません。コントローラのすべてのエラーを処理して適切なJSON結果を返すと、エラーはELMAHによって記録されません。私はエラーを記録するためにELMAHを特別に呼び出すことができると知っていますが、私はむしろ他の場所でそれをする必要はありません。MVC 3で適切なJSON書式設定のエラーをキャッチするときにELMAHでエラーを記録するにはどうすればいいですか?

誰でもこのシナリオを処理するための「適切な」方法を明確にすることはできますか?

私はこれを '扱う' だので例

try 
{ 
       //service.dosomethingwitherror(); 
    return new JsonResult { Data = new { result = true, message = "Success." } }; 
} 
catch (Exception ex) 
{ 
    return new JsonResult { Data = new { result = true, message = "Failed." } }; 
} 

ため、ELMAHは記録しません。これを処理しないと、クライアントはJSONを取得しません。

答えて

5

ErrorSignalクラスを使用して手動でログを記録できます。これにより、設定されたすべてのelmah操作(ログ、メール、ツイートなど)が実行されます。

ErrorSignal.FromCurrentContext().Raise(new NotSupportedException()); 

詳細については、http://code.google.com/p/elmah/wiki/DotNetSlackersArticle#Signaling_errorsを参照してください。

実際にコントローラにコードを追加したくない場合は、例外サーバー側をキャッチして、JavaScriptのajaxエラーイベントを処理できません。

+0

回答ありがとうございます。あなたが言ったように私は考えましたが、JSON結果が必要であり、そのエラーをパッケージ化するための良いmvcの方法があるはずです。私がベターの答えを見つけることができない場合は、あなたが提案したとおりにします。 – Steven

+2

'ElmahErrorAttribute'を継承する' JsonElmahErrorAttribute'クラスを作成し、 'new JsonResult {Data = new {result = true、message =" Failed "でモデルを上書きすることができます。 }} '。 – jrummell

関連する問題