asp.net Webサイトに共通のカスタムエラーページがあります。これは、発生した最後のエラーコードを見つけてそのカスタムエラーページにリダイレクトしたいすべてのエラーで表示されるのが一般的であるためです。発生したエラー。
注:ソリューションはセッションベースである必要があります。もちろん、他のユーザーのシステムで発生したエラーをユーザーに表示させたくありません。
IISまたはApacheを使用していますか?
Apacheの場合 カスタマイズされたエラーページを提供するようにApacheを設定するのは非常に簡単です。これに専念するhttpd.confファイルのセクションがあります。エラーごとに1つのディレクティブを実行するだけです。confファイルを開いて、セクション2のほぼ一番下までスクロールすると、編集する必要のあるセクションが表示されます。デフォルトでは、これらのディレクティブはコメント化されていますが、各ディレクティブのコメントを解除してから、パスを変更して独自のエラーページを指すようにするだけです。
ErrorDocument 404 /errordocs/404error.html
IIS IIS 6の場合:Webサイトまたは仮想ディレクトリを編集してからUserdefindedError。そこで、すべてのエラーファイルを編集し、ユーザー定義のasp.netファイルに変更できます。
IIS 7:詳細なエラーメッセージを参照してください:http: //blogs.msdn.com/b/rakkimk/archive/2007/05/25/iis7-how-to-enable-the-detailed-error-messages-for-the- website-while-browsed-from-for-the-client-browsers.aspx
私が提案するのは、UI.Page クラスを拡張し、そのクラスをすべてのページに使用することです。
そのクラス(vbはc#ではありませんが、同じ原則と簡単に変換できることを知っています)では、次のコードを使用します。
Public Class _PageBase
Inherits System.Web.UI.Page
#Region "Page Functions"
Private Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error
Session("error_StackTrace") = Server.GetLastError.StackTrace.ToString
Session("error_Message") = Server.GetLastError.Message.ToString
Session("error_Page") = Request.Url.ToString
Session("error_Source") = Server.GetLastError.Source.ToString
Server.ClearError()
Response.Redirect("~/errors/Error.aspx")
End Sub
#End Region
End Class
これは、その基本クラスを使用するすべてのページで発生し、最後の「サーバー」エラー (ユーザーが引き起こしたエラー) を渡し、すべての詳細をセッションに保存して、エラー ページに渡します。その後、あなたが望むようにすることができます。
あなたが何をしようとしているのかよくわかりません。ページ内で発生したコードのエラーをキャプチャし、そのページにメッセージを表示する必要があります (ページに留まる)。これが可能であれば、ユーザーに修正する機会を与えます。エラーが try/catch から外れて制御不能になった場合は、ログに記録して修正してください。
ユーザーに表示できる唯一のエラーは、「見つからないページ」です。
次のように最後のエラーを取得できますException LastOneError = Server.GetLastError();
また、エラーについて詳しく読むことができます: ASP.NET アプリケーションで "一般的なエラー" ページを作成して、そのページ自体を提供するときにトリガーされたエラーを処理するにはどうすればよいですか?