ASP.NET カスタムエラーページ(C#とVB.net)

ASP.NETのC#とVB.netのカスタムエラーページのサンプルです。
(確認環境:Microsoft Visual Studio Community 2019)

目次

サンプル 例外が発生したときの画面
  例外の詳細を表示しない(カスタムエラーをon)
  HTTPエラー状態に応じたカスタムページ
参考 ASP.NETのエラーの画面とIISのエラー画面の違い

例外が発生したときの画面

コントローラで例外が発生したときの画面を確認します。

コントローラのクラスの6行目にThrow文を追加し、エラーを発生させます。

C#

    public class Test1Controller : Controller
    {
        public ActionResult Index()
        {
			throw new Exception("エラーです");
			return View();
        }
    }

vb.net

Namespace Controllers
	Public Class test1Controller
		Inherits Controller
		
		Function Index() As ActionResult
			Throw New Exception("エラーを投げます")
			Return View()
		End Function
	End Class
End Namespace

この状態でビューを開くと以下の例外の詳細が表示されます。

スタックトーレスも表示されます。

(※デバッグモードで開いているときはステップを進めます)

2

 

例外の詳細を表示しない(カスタムエラーをon)

例外の詳細を表示しないようにします。

プロジェクト直下のweb.configのsystem.webを修正します。

  <system.web>
    <customErrors mode="On"></customErrors>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>
  </system.web>

2行目に、customErrors mode="On"の行を追加しました。

 

この状態でビューを開くと以下の画面になります。

例外の詳細は表示されなくなります。

この画面は、Viewsフォルダ>Sharedフォルダ>Error.vbhtml/Error.cshtmlの内容が表示されています。

 

customErrorsのmodeの値と内容は以下のとおりです。

customErrorsのmodeの値
内容
on 例外の詳細は表示されません。
off 例外の詳細が表示されます。
RemoteOnly リモートのユーザーの場合例外の詳細は表示されません。
ローカルのユーザーの場合例外の詳細が表示されます。

以下は、MicroSoftのカスタム エラー ページのリンクです。
https://docs.microsoft.com/ja-jp/aspnet/web-forms/overview/older-versions-getting-started/deploying-web-site-projects/displaying-a-custom-error-page-cs

 

HTTPエラー状態に応じたカスタムページ

HTTPエラー状態に応じたカスタムページを作成するサンプルです。
HTTPステータスが404のとき、専用のページに遷移するようにします。

コントローラ

コントローラのコードです。ビューを表示するだけの機能です。

C#

    public class Test1Controller : Controller
    {
        public ActionResult Index()
        {
			return View();
        }
    }

VB.net

Namespace Controllers
	Public Class test1Controller
		Inherits Controller

		Function Index() As ActionResult
			Return View()
		End Function
	End Class
End Namespace

 

Web.config

ASP.NETとIISの2つの設定があります。

1.ASP.NETの設定

  <system.web>
    <customErrors mode="On">
      <error statusCode="404" redirect="~/Error2.html" />
    </customErrors>
    省略
  </system.web>

プロジェクト直下のweb.configのsystem.webに3行目を追加しました。
HTTPステータスコードが404のときは、プロジェクト直下のError2.htmlにリダイレクトします。

以下は、Error2.htmlです。

<!DOCTYPE html>
<html>
<head>
	<title>エラー</title>
</head>
<body>
	<h1>ASP.NET エラー</h1>
	<h2>ステータス404です</h2>
</body>
</html>

ASP.NETのエラーを確認する

存在しないパスを指定するとASP.NETのエラーでError2.htmlが表示されます。

 

2.IISの設定

  <system.webServer>
      <httpErrors errorMode="Custom">
        <remove statusCode="404" />
        <error statusCode="404" path="Error3.html" responseMode="File" />
      </httpErrors>
    省略
  </system.webServer>

プロジェクト直下のweb.configのsystem.webServerに2~5行目を追加しました。
(system.webServerがない場合は追加します)

HTTPステータスコードが404のときは、プロジェクト直下のError3.htmlを表示します。

以下は、Error3.htmlです。

<!DOCTYPE html>
<html>
<head>
	<title>エラー</title>
</head>
<body>
	<h1>IIS エラー</h1>
	<h2>ステータス404です</h2>
</body>
</html>

IISのエラーを確認する

存在しないファイルを指定するとIISのエラーでError3.htmlが表示されます。

 

ASP.NETのエラーの画面とIISのエラー画面の違い

以下は、ASP.NETのエラー画面です。黄色の箇所があります。

2

 

以下は、IISのエラー画面です。IISの文字があります。

 

以下は、MicroSoftのHTTP エラーのリンクです。
https://docs.microsoft.com/ja-jp/previous-versions/ee431601(v=technet.10)?redirectedfrom=MSDN

関連の記事

(ASP.NETとVB.NET) Web.configファイルの値を取得

△上に戻る