Доступен ли Response.Redirect в global.asax в интегрированном режиме IIS 7? - PullRequest
2 голосов
/ 25 февраля 2012

Я исследую проблему, которая возникает у нас с IIS 7, работающим в интегрированном режиме.У нас есть несколько приложений, работающих в .net 3.5.Стандартный способ, которым мы всегда ловили и обрабатывали необработанные исключения, - это использование метода Application_Error в Global.asax (в этом случае необработанное исключение - это исключение HttpException, которое создается, когда делается запрос на несуществующую страницу aspx.).

Внутри Application_Error мы используем нашу пользовательскую обработку ошибок, чтобы записать ошибку в базу данных, отправить электронное сообщение с предупреждением, а затем перенаправить на указанную страницу ошибки.Регистрация ошибок и оповещение по электронной почте работает как положено.Перенаправление не происходит.

Я использовал Fiddler для просмотра запроса / ответа, и я получаю HTTP 302 на страницу, совершенно отличную от той, что есть в моем разделе customErrors.

Почемуне работает Response.Redirect в Application_Error?

Вот мой код:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    Dim ex As System.Exception = Server.GetLastError
    Server.ClearError()

    If Not (TypeOf (ex) Is HttpException) Then
        //Run our internal error handling here
    Else
        Dim httpEx As HttpException = CType(ex, HttpException)
        Response.Clear()
        Response.StatusCode = httpEx.GetHttpCode()
        Response.TrySkipIisCustomErrors = True
        Server.Transfer("../Error.htm")
    End If
End Sub

Это работает нормально, когда я пытаюсь посетить страницу aspx, которая не существует.Однако это не работает для статических страниц.

Я пробовал так много вариантов, что этот код в настоящее время выполняется без раздела customErrors или httpErrors.

1 Ответ

0 голосов
/ 25 февраля 2012

Если это происходит на странице ошибок IIS, вам нужно установить TrySkipIisCustomErrors в true.

...