2009-07-14 10 views
1

私はアプリケーションでエラーをキャッチしてログに記録するためにApplication_Errorイベントを使用します。彼らは、404のASP.NETアプリケーションエラーをオーバーライドしますか?

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

ユーザーが存在しないページをロードしようとするたびに:

私は私のweb.configファイルで

:エラーはフレンドリーエラー画面が表示され、その後、記録されますGlobalError.aspxページを取得し、PageNotFound.aspxページは取得しないでください。私はApplication_Errorイベントを調べ、Response StatusCodeが200で、Serverの最後のエラーが "Page 'foo.aspx'が見つかりませんでした。

これを正しく動作させるには、何が必要ですか?

答えて

3

Errorがpage not found/404エラーでない場合、Application_Error関数ではServer.Transferのみを使用してください。そのような場合は、ASP.NETにリダイレクトしてweb.configの設定を使用してリダイレクトを行います。

それは、以下のものを使用して404だ場合は、把握できます

Exception ex = Server.GetLastError(); 
if (ex.GetType() == typeof(HttpException)) 
{ 
    HttpException httpEx = (HttpException)ex; 
    if(httpEx.GetHttpCode() == 404) { 
    return; 
    } 
} 
Server.Transfer("~/error.aspx"); 
+0

私はこれについて考えましたが、私が言ったように、ページが見つからない場合でも、StatusCodeは404ではなく200になります。 –

+0

404エラーであるかどうかを検出するためのスニペットを追加しました –

+0

これは、期待していますが、不器用に見えますか?なぜこれを検出しなければならないのですか?なぜweb.configは期待通りに動作しないのですか? –

0

まず、GlobalError.aspxを取得する理由を判断する必要があります。あなたは私たちに2つの可能性を示しました。多分もっと多くがあります。

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

+0

を私はdefaulRedirectを削除すると、それは同じ場所にユーザーをプッシュします。明らかに、ファイルへの2つの参照は冗長です。 –

+0

私は、404がエラーページを見つけることができない可能性があることに気付きました。 IISログを確認します。 –

+0

いいえ、404ページが直接ロードされたときに表示され、ログにfoo.aspxが見つからないというメッセージが表示されます。 問題は実際には「巧妙な」ユーザーの一部です。私はbar.aspxというページを使います。クライアントサイトでは、「bar」は「foo」と呼ばれます。 bar.aspxをロードすると、「Foo」という大きなタイトルが表示されます。これは、言語辞書と同様に扱うさまざまなクライアント間の違いです。 問題は、foo.aspxを直接ロードし、foo.aspxが壊れていると考えるエラー画面が表示されることです。 。 –

関連する問題