2

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 をリモートで取得することはできません。

4

3 に答える 3

0

<httpErrors>とは対照的に、おそらく調べることができます<customErrors>か?

http://tedgustaf.com/blog/2011/5/custom-404-and-error-pages-for-asp-net-and-static-files/の情報。

于 2013-04-26T11:42:05.603 に答える