N'obtenant pas de redirection de page d'erreur personnalisée à l'aide d'erreurs personnalisées - ASP.Net

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

Question

Voici mon Application_OnError récepteur d'événements mondiaux.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

Vous verrez que si nous avons une intime Exception de type AccessDeniedException nous jeter un nouveau HTTPExcpetion avec un code d'état de 403 AKA 'interdit'

Voici la web pertinents.entrée config:

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

Donc, ce que nous attendons est une redirection vers la AccessDenied.page aspx.Ce que nous obtenez de l' est une redirection vers la ServerError.page aspx.

Nous avons également essayé ceci:

    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

Qui unsuprisingly ne fonctionne pas non plus.

Toutes les idées que nous nous faisons de mal?

Était-ce utile?

La solution

Application_Error est destiné à intercepter les erreurs qui ne sont pas prises en charge par votre application.Quand il se déclenche, une erreur est déjà arrivé et tout est à propos de cette erreur.Si vous jetez une erreur de l'intérieur Application_Error vous êtes en train de dire "il y a une erreur avec mon gestionnaire d'erreur".Au lieu de cela juste Server.Transfer à la page appropriée.Si vous voulez garder tous vos redirection de logique dans le web.config vous pouvez le voir cet article sur l'analyse de la section customErrors à comprendre où redirection.

Tout cela est dit, et je n'ai pas essayé cela, mais pouvez-vous essayer d'appeler Server.ClearError():

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

Je ne pense pas que cela marchera car de ce que j'ai dit ci-dessus, mais sa vaut la peine d'essayer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top