Сервер.Передача в глобальном масштабе.эйсакс
У меня есть пользовательский обработчик ошибок в глобальном.метод Application_Error asax, когда возникает ошибка, я использую следующий код для переноса пользователя на страницу ошибки:
Server.Transfer("/Error/");
Однако без указания фактического имени страницы приведенный выше код разрывается с исключением" ошибка выполнения дочернего запроса для /Error/".
Поэтому, если я использую Server.Transfer("/Error/Default.aspx")
, это работает нормально без проблем.
Также с помощью Response.Redirect("/Error/")
тоже работает нормально, однако мы хотим продолжать использовать сервер.Передача для сохранения URL-адреса отображается в адресной строке, когда отображается страница ошибки, поэтому пользователи могут просто обновить страницу, чтобы повторить попытку доступа к исходному URL-адресу, нарушающему правила.
Буду признателен, если кто-нибудь сможет прокомментировать, как получить сервер.Метод переноса работает без указания фактического имени страницы aspx.
Большое спасибо.
1 ответ:
Server.Transfer
необходим реальный, виртуальный путь к ресурсу,который даст необходимый результат. Он не проходит через IIS, чтобы узнать, что такое документ(ы) веб-сайта по умолчанию, поэтому он понятия не имеет, что вы подразумеваете под "/Error/", если это не настоящее имя файла.
Response.Redirect
работает, потому что это отправка "перемещенного" результата в браузер с этим относительным URL-адресом (/Error/), и когда браузер делает новый запрос на /Error/, IIS обрабатывает его первым и применяет параметры документа по умолчанию.