No conseguir la redirección a la página de error personalizado utilizando errores personalizados - ASP.Net

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

Pregunta

Aquí está mi receptor de sucesos Application_OnError en 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

Se verá que si tenemos una excepción más interna de tipo AccessDeniedException tiramos un nuevo HTTPExcpetion con un código de estado de 403 También conocido como 'prohibida'

Aquí está la entrada correspondiente web.config:

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

Así que lo que estamos esperando es una redirección a la página AccessDenied.aspx. Lo que get es una redirección a la página ServerError.aspx.

También hemos intentado esto:

    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

¿Qué unsuprisingly no funciona bien.

Alguna idea de lo que estamos haciendo mal?

¿Fue útil?

Solución

Application_Error está destinado a detectar los errores que no son manejados por su aplicación. Cuando se dispara, un error ya ha ocurrido y todo está a punto ese error. Si se lanza un error desde dentro Application_Error que está diciendo en realidad "hay un error con mi gestor de errores". En su lugar sólo Server.Transfer a la página correspondiente. Si desea mantener toda la lógica de redireccionamiento en web.config se puede ver este Artículo sobre cómo analizar la sección customErrors de averiguar dónde redirigir a.

Dicho todo esto, y no he probado esto, pero se puede intentar llamar Server.ClearError():

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

No creo que va a funcionar debido a lo que he dicho anteriormente, pero vale la pena probarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top