6

私は、ASP.NET MVCのアクションメソッド投げる例外はASP.NET MVCで内部例外を表示

throw new Exception("outer", new SecurityException("inner")); 

実際に死の黄色の画面上に表示されるエラーに次の行を追加する場合外側の例外についてはまったく言及していない内部のSecurityExceptionです。

SecurityException

Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.

Exception Details: System.Security.SecurityException: inner

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[SecurityException: inner]

この現象は予期しないものですか?

外部例外がどのようなタイプであるかは問題ではないようです。別のSecurityExceptionであっても、メッセージは決して表示されません。デフォルトのSecurityExceptionエラーメッセージはあまりにも曖昧で、私はそれをキャッチして、より具体的な情報を追加したい。元のSecurityExceptionをinnerExceptionとして含めるのではなく、これを行うのが理想的です。

+0

私はこれがsecurityexceptionだけでなく、あらゆる内部例外に対して当てはまることを見ています。 –

答えて

-1

一般的にあなたが例えば、Exceptionクラス/オブジェクトを直接だけ派生のものを投げることはありません。このような状況で

throw new SecurityException("user should not be allowed to access this method..."); 

を使用すると、ログまたはページに何が欠けていますか?

アプリケーショングローバル例外ハンドラを使用し、そこからLog4NetまたはNLogのいずれかでログオンした場合、ロギングフレームワークの構成方法と使用方法に応じて、すべての例外チェーンを外部から内部にアクセスできる必要があります。 IIS/ASP.NETのイエローページは完全ではないかもしれませんが、とにかくスタックトレースが表示されるはずです。

throw new SecurityException("user should not be allowed...", exc); 

編集:あなたはこのようにキャッチからの実際の例外をラップするcatchブロックから独自の例外をスローする場合

はあなたが提案し何をしようと、ログインし以下のようになりましたLog4Netによるテキストファイル:

System.Security.SecurityException: more explicit exception ---> System.Security.SecurityException: original exception at EDICheckerApp.Program.boom() in C:\DEV_RPP\Program.cs:line 45
--- End of inner exception stack trace --- at EDICheckerApp.Program.boom() in C:\DEV_RPP\Program.cs:line 49
at EDICheckerApp.Program.Main(String[] args) in C:\DEV_RPP\Program.cs:line 27

+1

これを試してみて、私が言っていることを理解してください: { 新しいSecurityExceptionをスローする( "元の例外"); } catch(SecurityException ex) { throw new SecurityException( "もっと明示的な例外"、ex); } –

+0

はい、私は理解していますが、ロギングフレームワークですべてをダンプしようとしましたが、ログファイルには何が入っていますか? –

+1

この場合、メッセージは主に開発者向けです。フレンドリーなエラーメッセージを表示して、開発者がデバッグ時にログに記録するのではなく、わかりやすいメッセージを得ることができるようにします。 –

5

この動作は、ASP.NET MVCではなく、ASP.NETコアで発生します。残念ながら、エラーフォーマッタクラスは内部的なものであり、消費型は、エラー報告メカニズムを置き換えずに動作を微調整できる拡張ポイントを提供しません。回避策は、デフォルトの「死の黄色い画面」ページを、好みの情報を公開するカスタムエラーページ/ビューで置き換えることです。

これはまさにプロダクションのために行うべきことです。あなたの場合は、ASP.NETが提供するデフォルトを使用する代わりに、代わりにデバッグ用の代替バージョンを使用することを意味します。

関連する問題