Server.Transfer ("Error_404.aspx") no Application_error retorna uma página em branco
-
22-09-2019 - |
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.
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
.