Pergunta

Procuro httpExceptions no Application_error sub do meu global.asx

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

Eu posso passar por esse código e confirmar que ele atinge o servidor.Transfer ("error_404.aspx"), bem como o Page_load de error_404.aspx, mas tudo o que mostra é uma página em branco.

Foi útil?

Solução

Você está limpando o buffer de resposta? Você não tem idéia do que já está lá, já que está fazendo isso no Application_error Catch-All. Server.Transfer apenas anexa o que a nova página gera na resposta existente. Obviamente, isso pode criar alguns problemas.

Outras dicas

Funciona se você mudar o Server.Transfer para um Response.Redirect? (Você pode ter que usar o prefixo httpcontext.current de onde você está no global.asax.)

Não tenho certeza se um servidor.Transfer é uma boa ideia no contexto do que você está fazendo, já que você está efetivamente pedindo ao IIS para renderizar o Global.asax URL ao navegador.

Eu acho que se ocorrer algum erro, o servidor.Transfer não disparará.

Server.Transfer não é um bom método para isso. Tente com Response.Redirect. Deve funcionar.

Se você tiver alguma exceção, existe algum requisito para manter os estados? Se não, vá com Response.Redirect.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top