1

開発中またはサーバー上でローカルに有用な情報を提供する場合は YSOD を表示したいが、それ以外の場合は半一般的なページを表示したい。web.config でdefaultRedirectアプリケーションの構成タグの属性を設定できることはわかっていますが、少し処理を行って、もう少し優れた情報を含むページを生成したいと考えています。<customErrors>

すべてのコントローラーは、OnException をオーバーライドした中央の BaseController クラスから継承します (基本的には次のようにします)。

protected override void OnException(ExceptionContext filterContext) {
    //if something really bad happened and we get inside this if, 
    //just let the YSOD appear because there isn't anything we can do
    if (filterContext == null)
        return; 

    LogException(filterContext.Exception);

    //insert answer for question here:
    if (FigureOutIfDetailedYsodWouldBeDisplayed(filterContext)) 
        return;

    //what to actually do for end users
    filterContext.ExceptionHandled = true;
    filterContext.Result = View("ErrorPage", GetErrorModel(filterContext));
}

どのように実装すればよいですかFigureOutIfDetailedYsodWouldBeDisplayed(答えはコードである必要はありません。正しい方向へのポインターで十分です)。私の現在の実装では、「//localhost」の存在について生の URL をチェックしますが、この解決策は不器用に感じられ、常に機能するとは限りません (たとえば、開発者が localhost 以外のものを入力するホスト エントリを持っている場合: 私たちの要件)以前はあったアプリ)。

4

2 に答える 2

2

HTTPエラーコードごとにカスタムエラーページを追加することもできることをご存知ですか?では、このカスタムエラー処理コードが本当に必要ですか?

  <customErrors mode="RemoteOnly" defaultRedirect="Error/Default">
    <error statusCode="401" redirect="Error/AccessDenied" />
    <error statusCode="404" redirect="Error/NotFound" />
  </customErrors>

また、本当に特定のニーズがない限り、この例外ロギングコードを自分で作成しないことをお勧めします。どうぞよろしくお願いします。ELMAHをチェックしてください。真剣に。[免責事項:私はこのプロジェクトに関与していません。非常に満足しているユーザーです]

必要なのは(文字通り!)web.configに数行、binフォルダーにdllをドロップし、(DBにログを記録する場合は)単一の.sqlスクリプトです。

プロジェクトページから:

「ELMAH(エラーログモジュールとハンドラー)は、完全にプラグイン可能なアプリケーション全体のエラーログ機能です。実行中のASP.NET Webアプリケーション、またはマシン上のすべてのASP.NETWebアプリケーションに動的に追加できます。再コンパイルまたは再展開の必要性。

ELMAHを実行中のWebアプリケーションにドロップして適切に構成すると、コードを1行も変更せずに、次の機能を利用できます。

  • ほぼすべての未処理の例外のログ。
  • 再コーディングされた例外のログ全体をリモートで表示するためのWebページ。
  • ログに記録された例外の詳細をリモートで表示するためのWebページ。
  • 多くの場合、customErrorsモードがオフになっている場合でも、ASP.NETが生成した元の黄色の画面を確認できます。
  • エラーが発生したときの各エラーの電子メール通知。」
于 2010-02-08T20:39:27.003 に答える
0

開発環境のデバッグ設定と本番環境のリリースを使用して実際にビルドする場合は、いつでも実行できます

#if DEBUG
    //Show YSOD
#else
    //Show friendly error page
#endif
于 2010-02-08T20:09:57.027 に答える