でも今日はハマったので未来の自分のためにメモです。
Global_asaxのApplication_Errorイベントで
Server.Transferでカスタムエラーページを表示しているのですが
.netのエラーページが表示されてしまい、カスタムエラーページが表示されません。
環境はVS2012,Fw3.5です。
まったく同じコードでもVS2008,Fw2.0ではちゃんと動きます。
こういうのわかりにくいから勘弁してほしい…。
ASP.NETのGlobal_asaxのコードです。
Application_Errorイベントでカスタムエラーページを表示します。
Imports System.Web.SessionState
Public Class Global_asax
Inherits System.Web.HttpApplication
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' エラーの発生時に呼び出されます
'カスタムエラーページを表示します。
Server.Transfer("~/CustomError.aspx")
End Sub
End Class
カスタムエラーページではエラー内容を表示してます。
結論いうと、Loadイベントでエラーを出力した後、Context.ClearError() を呼んであげればちゃんと動きました。
CustomError.aspx
Public Class CustomError
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ex As Exception
ex = Server.GetLastError
If TypeOf ex Is HttpUnhandledException AndAlso ex.InnerException IsNot Nothing Then
ex = ex.InnerException
End If
If ex IsNot Nothing Then
Me.Label1.Text = ex.GetType.ToString
Me.Label2.Text = ex.Message
End If
Context.ClearError() '<--これが必要。
End Sub
End Class
web.configです
<system.web>
<customErrors mode="On"/>
</system.web>
0 件のコメント:
コメントを投稿