2

Application_Error イベントを使用して、アプリのエラーをキャッチしてログに記録します。エラーがログに記録され、わかりやすいエラー画面が表示されます。

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim ex As New Exception( _
            String.Format("Error on page: '{0}'.", HttpContext.Current.Request.Url), _
            Server.GetLastError())

        Dim uid As Guid = Log.FatalError(ex)
        Server.Transfer(String.Concat("~\\GlobalError.aspx?error=", uid))
End Sub

私のweb.configには次のものがあります:

<customErrors mode="On" defaultRedirect="GlobalError.aspx">
  <error statusCode="404" redirect="PageNotFound.aspx" />
</customErrors>

ユーザーが存在しないページを読み込もうとすると、PageNotFound.aspx ページではなく、GlobalError.aspx ページが表示されます。Application_Error イベントを調べたところ、Response StatusCode が 200 であることがわかりましたが、サーバーの最後のエラーは「ページ 'foo.aspx' が見つかりませんでした」でした。

これを正しく機能させるにはどうすればよいですか?

4

2 に答える 2

5

Application_Error 関数では、エラーがページが見つからない/404 エラーでない場合にのみ Server.Transfer を使用する必要があります。そのような場合は、web.config の設定を使用してリダイレクトを行うために、ASP.NET に任せてください。

以下を使用して、それが 404 かどうかを判断できます。

Exception ex = Server.GetLastError();
if (ex.GetType() == typeof(HttpException))
{
  HttpException httpEx = (HttpException)ex;
  if(httpEx.GetHttpCode() == 404) {
    return;
  }
}
Server.Transfer("~/error.aspx");
于 2009-07-14T19:38:34.617 に答える
0

まず、GlobalError.aspx を取得する理由を特定する必要があります。あなたは私たちに 2 つの可能性を示しました。もっとあるかもしれません。

これらのエントリの 1 つの名前を GlobalErrorX.aspx に変更し、何が起こるかを確認します。

于 2009-07-14T19:35:20.113 に答える