EPiServer 初期化パイプラインで構成または例外が発生したときに、アプリケーションの起動時に例外をスローすることがある EPiServer アプリケーションがあります。/Error.htm ページにリダイレクトするように customErrors を構成し、global.asax の Application_EndRequest イベントでこのページの応答ステータス コードを処理して、次のような正しいステータス コードを返します。
protected void Application_EndRequest(object sender, EventArgs e)
{
if (Request.Url.AbsolutePath.EndsWith("Error.htm"))
{
Response.StatusCode = 500;
Response.TrySkipIisCustomErrors = true;
}
}
アプリケーションのロード時に例外が発生した場合はうまく機能しますが、構成ファイル (私の場合は episerver.config) のロード時または EPiServer 初期化パイプラインで例外が発生した場合 (EPiServer には 1 つのバグがあります) には機能しません。
IHttpModule を作成しようとしましたが、初期化されていません。Application_Error にエラー処理を追加しようとしましたが、それも起動されません。
ASP.NET は Error.htm ページに正しくリダイレクトされるため、これらの例外を処理しているようですが、ステータス コード 304 が設定されます。また、パイプラインに入ってステータス コードを変更する方法が見つかりません。
ロード バランサーを構成して、不適切に構成されたサーバーを削除するには、エラー ページに 500 ステータス コードが必要です。
アップデート
正しいステータス コードが IIS に送信されるように、カスタム エラーをオフに設定しました。
<customErrors mode="Off" defaultRedirect="/Error.htm"></customErrors>
httpError セクションを Error.htm にリダイレクトするように構成しましたが、完全な例外の詳細がローカルおよびリモートで表示されます。existingResponse="Replace" を追加すると、リダイレクトのループが原因で例外がスローされます。
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" prefixLanguageFilePath="" path="Error.htm" responseMode="Redirect" />
</httpErrors>
httpError セクションを ExecuteURL に構成しましたが、完全な例外の詳細がローカルおよびリモートで表示されます。existingReplace="Replace" を追加すると、ローカルおよびリモートで完全な例外の詳細が表示されます。
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" prefixLanguageFilePath="" path="/Error.htm" responseMode="ExecuteURL" />
</httpErrors>
responseMode="File" と existingResponse="Replace" を設定すると、ローカルとリモートで Error.htm が表示されます。
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" prefixLanguageFilePath="" path="Error.htm" responseMode="File" />
</httpErrors>
エラーの詳細をローカルで取得し、Error.htm をリモートで取得することはできません。