N'obtenant pas de redirection de page d'erreur personnalisée à l'aide d'erreurs personnalisées - ASP.Net
-
22-09-2019 - |
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?
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.