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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top