Сервер.Передача (“ошибка_404.aspx”) в Application_Error возвращает пустую страницу
-
22-09-2019 - |
Вопрос
Я ищу HttpExceptions в подразделе Application_Error моего global.asx
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim ex As Exception = HttpContext.Current.Server.GetLastError()
If ex IsNot Nothing Then
If TypeOf (ex) Is HttpUnhandledException Then
If ex.InnerException Is Nothing Then
Server.Transfer("error.aspx", False)
End If
ex = ex.InnerException
End If
If TypeOf (ex) Is HttpException Then
Dim httpCode As Integer = CType(ex, HttpException).GetHttpCode()
If httpCode = 404 Then
Server.ClearError()
Server.Transfer("error_404.aspx", False)
End If
End If
End If
End Sub
Я могу пошагово просмотреть этот код и подтвердить, что он действительно попадает на Сервер.Передача ("error_404.aspx"), а также загрузка страницы error_404.aspx, но все, что она показывает, - это пустая страница.
Решение
Вы очищаете буфер ответов?Вы понятия не имеете, что там уже есть, поскольку вы делаете это в универсальном приложении Application_Error .Сервер.Transfer просто добавляет все, что генерирует новая страница, к существующему ответу.Очевидно, что это может создать некоторые проблемы.
Другие советы
Сработает ли это, если вы измените Server.Transfer
к a Response.Redirect
?(Возможно, вам придется использовать префикс HttpContext.Current из того места, где вы находитесь в global.asax.)
Я не уверен, что сервер.Передача - хорошая идея в контексте того, что вы делаете, поскольку вы фактически просите IIS отобразить глобальный URL-адрес.asax в браузере.
Я думаю, что если произойдет какая-то ошибка, сервер.Передача не сработает.
Сервер.Передача это не очень хороший метод для этого.Попробуйте с Ответ.Перенаправление.Это должно сработать.
Если у вас есть какое-либо исключение, есть ли какие-либо требования для сохранения состояний?Если нет, пойдите с Response.Redirect
.