Вот мой приемник событий Application_OnError в 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
Вы увидите, что если у нас есть внутреннее исключение типа AccessDeniedException, мы генерируем новое HTTPExcpetion с кодом состояния 403 AKA «запрещено»
Вот соответствующая запись web.config:
<customErrors defaultRedirect="~/Application/ServerError.aspx" mode="On">
<error statusCode="403" redirect="~/Secure/AccessDenied.aspx" />
</customErrors>
Итак, мы ожидаем перенаправления на страницу AccessDenied.aspx. То, что мы получаем - это перенаправление на страницу ServerError.aspx.
Мы также попробовали это:
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
Что неудивительно, что тоже не работает.
Есть идеи, что мы делаем не так?