Nicht Umleitung auf benutzerdefinierte Fehlerseite immer individuelle Fehler mit - ASP.Net
-
22-09-2019 - |
Frage
Hier ist mein Application_OnError Ereignissenke in 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
Sie werden sehen, dass, wenn wir eine innerste Ausnahme vom Typ AccessDeniedException haben wir einen neuen HTTPExcpetion mit dem Statuscode 403 AKA ‚verboten‘ werfen
Hier ist der relevante web.config Eintrag:
<customErrors defaultRedirect="~/Application/ServerError.aspx" mode="On">
<error statusCode="403" redirect="~/Secure/AccessDenied.aspx" />
</customErrors>
Also, was wir erwarten eine Umleitung auf die AccessDenied.aspx Seite. Was wir get ist eine Umleitung auf die ServerError.aspx Seite.
Wir haben versucht, auch diese:
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
Welche unsuprisingly funktioniert auch nicht.
Alle Ideen, was wir falsch gemacht?
Lösung
Application_Error
auf Fang Fehler bestimmt, die durch Ihre Anwendung nicht behandelt werden. Wenn es feuert, ist ein Fehler schon passiert und alles ist zu diesem Fehler. Wenn Sie einen Fehler aus Application_Error
werfen werden Sie tatsächlich sagen: „Es gibt einen Fehler mit meiner Fehlerbehandlung“. Statt nur auf die entsprechende Seite Server.Transfer
. Wenn Sie alle Ihre Umleitung Logik in web.config halten möchten, können Sie sehen diese Artikel darüber, wie der custom~~POS=TRUNC Abschnitt, um herauszufinden, zu analysieren, wo man umleiten.
Alle sagte dies, und ich habe nicht versucht, aber können Sie versuchen, rufen Server.ClearError()
:
Dim Ex = Server.GetLastError()
Server.ClearError()
Throw New HttpException(System.Net.HttpStatusCode.Forbidden, Nothing, Ex)
Ich glaube nicht, es wegen der funktioniert, was ich sagte oben, aber seine einen Versuch wert.