Я знаю, что Server.Transfer() следует использовать для перенаправления на другую страницу «.aspx» на том же сервере. Но в чем причина того, почему я не должен использовать этот метод для перенаправления на страницу aspx на другом сервере или на странице html? Ваши ответы действительно оценены.Почему мы не можем использовать Server.Transfer() для перенаправления на другом сервере
ответ
Server.Transfer может случиться только для одного HttpContext. Каждый виртуальный каталог или приложение имеет свой собственный объект HttpContext, и они не знают, что они сосуществуют! поэтому вы не можете этого сделать.
Во-первых, передача на другую страницу с использованием Server.Transfer сохраняет ресурсы сервера. Вместо того, чтобы сообщать браузеру о перенаправлении, он просто меняет «фокус» на веб-сервере и передает запрос. Это означает, что вы не получаете столько запросов HTTP, что, таким образом, снижает нагрузку на ваш веб-сервер и ускоряет работу ваших приложений.
Но обратите внимание: поскольку процесс «передачи» может работать только на тех сайтах, которые работают на сервере, вы не можете использовать Server.Transfer для отправки пользователя на внешний сайт. Только Response.Redirect может это сделать.
Во-вторых, Server.Transfer поддерживает исходный URL-адрес в браузере. Это может действительно помочь оптимизировать методы ввода данных, хотя это может привести к путанице при отладке.
От: Server.Transfer vs. Response.Redirect
Итак, вкратце: Response.Redirect просто говорит браузеру, чтобы посетить другую страницу. Server.Transfer помогает уменьшить запросы сервера, поддерживает URL-адрес одинаково и, с небольшим количеством ошибок, позволяет передавать строку запроса и формы переменных.
- Response.Redirect является более удобным, так как посетитель сайта может добавить закладку на страницу, на которой они перенаправлены.
- Перенесенные страницы отображаются клиенту как другой URL-адрес, чем они есть на самом деле. Это означает, что такие вещи, как относительные ссылки/пути изображения, могут не работать, если вы переходите на страницу из другого каталога.
- Server.Transfer имеет необязательный параметр для передачи данных формы на новую страницу.
- Начиная с версии релиза это больше не работает, поскольку теперь у ViewState больше безопасности (по умолчанию EnableViewStateMac соответствует true), поэтому новая страница не может получить доступ к данным формы. Вы все равно можете получить доступ к значениям исходной страницы на новой странице, запросив исходный обработчик:
Сессии не используются серверами, поэтому это будет большой проблемой.
Посмотрите на Server.Transfer Vs. Response.Redirect
Server.Transfer() работает только в пределах одного WebApplication.
С передачей «обработка» запроса внутренне (к веб-серверу/приложению) передается на другую страницу, поэтому объект запроса остается неизменным. Это означает, что обработка должна оставаться внутри веб-приложения.
Если вы хотите, чтобы обработка продолжалась в другом веб-приложении, вам понадобится новый запрос. Это означает, что вам потребуется, чтобы браузер выдал другой запрос, поэтому вам нужен Response.Redirect.
Спасибо, Ханс. Это было ясно. –
Существует также улов с Server.Transfer.Если вы перейдете на совершенно другой путь, вы можете разорвать другие зависимости от файлов. –