Server.Transfer в Global.asax

У меня есть собственный обработчик ошибок в методе global_asax Application_Error, когда возникает ошибка, я использую следующий код для переноса пользователя на страницу ошибки:

Server.Transfer("/Error/");

Однако без указания фактического имени страницы приведенный выше код прерывается с исключением "Ошибка при выполнении дочернего запроса для / Ошибка /".

Так что, если я использую Server.Transfer("/Error/Default.aspx") работает нормально без проблем.

Также используя Response.Redirect("/Error/") тоже работает нормально, однако мы хотим продолжать использовать Server.Transfer для сохранения URL-адреса, отображаемого в адресной строке при отображении страницы с ошибкой, чтобы пользователи могли просто обновить страницу, чтобы повторить попытку доступа к исходному некорректному URL-адресу.

Был бы признателен, если кто-нибудь может прокомментировать, как заставить метод Server.Transfer работать без указания реального имени страницы aspx.

Большое спасибо.

1 ответ

Решение

Server.Transfer нужен фактический, виртуальный путь к ресурсу, который даст необходимый результат. Он не проходит через IIS, чтобы выяснить, какие документы используются на веб-сайте по умолчанию, поэтому он не имеет ни малейшего представления о том, что вы подразумеваете под "/ Ошибка /", если только это не является действительным именем файла.

Response.Redirect работает потому, что отправляет "перемещенный" результат в браузер с этим относительным URL (/Error/), а когда браузер создает новый запрос для / Error /, IIS обрабатывает его первым и применяет параметры документа по умолчанию.

Другие вопросы по тегам