カテゴリー
Microsoft

【ASP.NET MVC5】例外発生時のカスタムエラーページの設定ポイント♪

【ASP.NET MVC5】例外発生を補足して自動的にログ書き込みを行う方法 | oki2a24 ではエラーが発生したときに自動的にロギングされるように設定いたしました。

この時、エラーページが自動的に表示されるわけですけれども、これを明確にコントロールするためのポイントをメモしておきます♪

ポイント

  • HTTP 404. Not Found 時にはカスタムエラーページは表示されない。
  • コードの確認ポイント
    • Web.config の <system.web> 内の の mode を On にしていること
    • App_Start\FilterConfig.cs の RegisterGlobalFilters メソッド に HandleErrorAttribute クラスを追加していること
    • Views\Shared\Error.cshtml でエラー画面を設定していること

ひとつひとつコードを見ていきます。

Web.config の <system.web> 内の の mode を On にしていること

customErrors mode は、普段は On ではなく、別サーバからのアクセス時のみカスタムエラーページを有効とする RemoteOnly としておくと良いですわ♪

Web.config

<system.web>
  <customErrors mode="On"/>
... 略 ...
</system.web>

App_Start\FilterConfig.cs の RegisterGlobalFilters メソッド に HandleErrorAttribute クラスを追加していること

プロジェクトを作成した時から次のようになっておりました。ですので確認だけですの。

ここに書くのは、アプリケーションレベルでフィルターをかけるときには、FilterConfig クラスに設定をするからですわ。

App_Start\FilterConfig.cs

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
}

Views\Shared\Error.cshtml でエラー画面を設定していること

こちらも、最初から次のように書かれておりました。

Views\Shared\Error.cshtml

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width" />
    <title>エラー</title>
</head>
<body>
    <hgroup>
        <h1>エラー。</h1>
        <h2>要求の処理中にエラーが発生しました。</h2>
    </hgroup>
</body>
</html>

確認

【ASP.NET MVC5】例外発生を補足して自動的にログ書き込みを行う方法 | oki2a24 で使用した無理やり例外を発生させるコードで確認いたしました。

無事、次のようにエラーページが表示されました♪

例外発生で表示されたカスタムエラーページ

なお、存在しない URL にアクセスした場合ですと、このカスタムエラーページが適用されません。

HTTP 404. Not Found の場合はカスタムエラーページが表示されない

おそらく、別の手段で可能になると存じます。

おわりに

カスタムエラーページはウェブアプリを作ろうと思いましたら必ず必要となります。それを見越して次の参考書には予め解説されており、大変助かりました。♪

また、404 Not Found の場合は、次のページのルーティング部分が参考なるように思えます(未検証)。

もうちょっとかしらね♪

以上です。

コメントを残す