Сервер.Передача в глобальном масштабе.эйсакс


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

Server.Transfer("/Error/");

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

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

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

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

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

1 6

1 ответ:

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

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