2016-08-06 19 views
0

序文:私にElmahを参照しないでください。 MVCの例外処理システムを自分自身で理解しようとしています。タイプSystem.Exceptionの例外が処理されません

私は自分の豊かさのためにMVCの例外システムで遊んでいます。私は奇妙な例外に遭遇しました。

protected override void OnException(ExceptionContext filterContext) 
{ 
    if (filterContext.ExceptionHandled == true) 
    { 
     return; 
    } 
    // log error 
    ErrorLog(filterContext); 

    // mark error as handled to prevent rethrow 
    filterContext.ExceptionHandled = true; 

    //show custom error page 
    ViewBag.Code = filterContext.Exception is HttpException ? ((HttpException) filterContext.Exception).GetHttpCode() : 500; 
    ViewBag.Exception = filterContext.Exception; 
    filterContext.Result = View("Error"); 
} 

私はおもちゃのコントローラに簡単な十分な呼び出しを介して、それを投げる:次のように私は、onExceptionをする方法を書いた

:私は次の例外が例外をテストしました
if(something strange and bad happens) 
{ 
    throw new Exception("When in trouble or in doubt, run in circles, scream and shout."); 
} 

System.Exception型の例外が発生し、ユーザーコードで処理されませんでした。

コンストラクタに送信した文字列は、エラーメッセージの一部として例外システムに入ります。エラーで実行を続行すると、そのメッセージのエラーページが表示されますが、コードを実行しようとすると以前のエラーが発生します。内部の例外の詳細はnullで、残りの例外の詳細はあまりにも疎であるため、何が間違っているのかを理解するために使用することはできません。

私はこの例外が発生していると思われます。なぜなら、元の例外を処理する基本クラスを終了させないからです。しかし、私は完全になぜそうは思っていません。私は例外処理に関するさまざまな記事を読んできましたが、私は基本クラスに例外の処理を完了させる必要があるかどうか、または私が処理したかどうかを私に説明した(私が知っている) doneは十分です。私はカスタム処理を見てきました。

私の疑惑が間違っていて、まったく別のものがあれば、それは誰か分かりますか?これがスローされる状況は非常に簡単で、他に何かがこの問題に影響する可能性は低いです。

なぜこのエラーが発生する可能性があるのですか?

+0

「エラーが発生してもエラーメッセージが表示されますが、コードを実行しようとすると以前のエラーが発生します。 ?デバッグしているときには動作しますが、コードを実行すると動作しません。 – Vache

+0

私がデバッグしているとき、Visual Studioはエラーをポップして実行を停止し、例外が処理されていないことを通知します。エラーの詳細を見ると、そこには何もありません。実行を続けると、プロセスはエラーページに進みます。 ...多分私はそれを質問に加えるべきです。それがどうやって不明なのか分かります。 – wormwood

+0

ここで例外が発生したようですhttps://dotnetfiddle.net/5M4tC5実行中に 'ErrorLog'メソッドで例外が発生する可能性はありますか? – Vache

答えて

1

私たちが見ることができるコードは上手く見えるので、例外は私たちが見ることができないErrorLogメソッドから来ていると考えられています。

ファイルがまだ使用されている(ファイルストリームを正しく処理していますか?)など、さまざまな理由でエラーが発生している可能性があります。

OnExceptionメソッドは、すべての地獄ブレークが例外処理中に例外が発生したときに例外が発生した場合に、MVCのエラー処理メカニズムをオーバーライドします。 MVCフレームワークは恐らくアプリケーションをクラッシュから救うために非常に高いレベルのtry { ... } catch { ... }を持っていますが、何が起こったかについての情報をもっと多く与えることはできません。

例外がスローされたときにビジュアルスタジオデバッガがブレークしていることを確認してから(https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx)、コードを実行してください。スローされた例外と関連するコードを見てください。その特定の部分が壊れているか、次のStackOverflow質問の対象が見つかるでしょう。 ;)

+0

それはエラーの原因でしたが、私は二次質問を残しました。私が与えられたメッセージ:System.Exception型の例外が発生しました--- Visual Studioの「例外コードを実行しようとしたときにどのように特徴づけるのかわからない」ということを理解する必要がありますか?特定のメッセージを取得する際に問題が解決する方法に影響します。 – wormwood

+0

Gotcha。それから私は自分のtry/catchを提供するべきだと思いますか? – wormwood

+0

ええ、エラー処理コードから例外が発生していないことを確認することをお勧めします。それはあなたが問題をデバッグするために必要なかもしれない元の例外のログを失うことになるので、それは両刃の剣です... – Vache

関連する問題