2

global.asx の Application_Error サブで HttpExceptions を探します。

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)

        Dim ex As Exception = HttpContext.Current.Server.GetLastError()

        If ex IsNot Nothing Then
            If TypeOf (ex) Is HttpUnhandledException Then
                If ex.InnerException Is Nothing Then
                    Server.Transfer("error.aspx", False)
                End If
                ex = ex.InnerException
            End If

            If TypeOf (ex) Is HttpException Then
                Dim httpCode As Integer = CType(ex, HttpException).GetHttpCode()
                If httpCode = 404 Then
                    Server.ClearError()
                    Server.Transfer("error_404.aspx", False)
                End If
            End If
        End If
End Sub

このコードをステップ実行して、Server.Transfer("error_404.aspx") と error_404.aspx の Page_Load にヒットすることを確認できますが、表示されるのは空白のページだけです。

4

3 に答える 3

4

応答バッファをクリアしていますか? Application_Error キャッチオールでこれを行っているため、何が既に存在するのかわかりません。Server.Transfer は、新しいページが生成するものを既存の Response に追加するだけです。明らかに、これはいくつかの問題を引き起こす可能性があります。

于 2010-03-28T01:39:56.420 に答える
0

エラーが発生した場合、Server.Transferは起動しないと思います。

Server.Transferは、このための適切な方法ではありません。Response.Redirectで試してください。動作するはずです。

例外がある場合、状態を維持するための要件はありますか?そうでない場合は、を使用してResponse.Redirectください。

于 2010-03-27T03:55:45.227 に答える
0

を に変更すると機能しますServer.TransferResponse.Redirect? (global.asax 内の場所から HTTPContext.Current プレフィックスを使用する必要がある場合があります。)

IISにglobal.asax URLをブラウザにレンダリングするように効果的に要求しているため、Server.Transferがあなたがしていることのコンテキストで良い考えであるかどうかはわかりません。

于 2010-03-27T02:51:17.660 に答える