Não obtendo redirecionamento para a página de erro personalizada usando erros personalizados - ASP.NET

StackOverflow https://stackoverflow.com/questions/2509953

Pergunta

Aqui está o meu evento Application_ONerror Sink em global.asax.vb:

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

    Dim innerMostException As Exception = getInnerMostException(Me.Context.Error)

    If TypeOf innerMostException Is AccessDeniedException Then

        Security.LogAccessDeniedOccurrence(DirectCast(innerMostException, AccessDeniedException))

        Dim fourOhThree As Integer = DirectCast(HttpStatusCode.Forbidden, Integer)

        Throw New HttpException(fourOhThree, innerMostException.Message, innerMostException)

    End If

End Sub

Você verá que, se tivermos uma exceção mais interna do tipo AccessdeniedException, jogamos um novo httpexcpetion com um código de status de 403 aka 'proibido'

Aqui está a entrada relevante da Web.config:

    <customErrors defaultRedirect="~/Application/ServerError.aspx" mode="On">
      <error statusCode="403" redirect="~/Secure/AccessDenied.aspx" />
    </customErrors>    

Então, o que esperamos é um redirecionamento para a página Accessdenied.aspx. O que nós pegue é um redirecionamento para a página ServerError.aspx.

Nós também tentamos o seguinte:

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

    Dim innerMostException As Exception = getInnerMostException(Me.Context.Error)

    If TypeOf innerMostException Is AccessDeniedException Then

        Security.LogAccessDeniedOccurrence(DirectCast(innerMostException, AccessDeniedException))

        Context.Response.StatusCode = DirectCast(HttpStatusCode.Forbidden, Integer)

    End If

End Sub

O que, sem sucesso, também não funciona.

Alguma idéia do que estamos fazendo de errado?

Foi útil?

Solução

Application_Error destina -se a capturar erros que não são tratados pelo seu aplicativo. Quando dispara, um erro já aconteceu e tudo é sobre esse erro. Se você apresentar um erro de dentro Application_Error Você está realmente dizendo "há um erro com meu manipulador de erros". Em vez disso Server.Transfer para a página apropriada. Se você quiser manter toda a sua lógica de redirecionamento em web.config, você pode ver Este artigo sobre como analisar a seção CustomErrors para descobrir para onde redirecionar.

Tudo isso dito, e eu não tentei isso, mas você pode tentar ligar Server.ClearError():

            Dim Ex = Server.GetLastError()
            Server.ClearError()
            Throw New HttpException(System.Net.HttpStatusCode.Forbidden, Nothing, Ex)

Eu não acho que funcionará por causa do que eu disse acima, mas vale a pena tentar.

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